【问题标题】:determine jpeg filesize without actually saving the jpeg确定 jpeg 文件大小而不实际保存 jpeg
【发布时间】:2011-08-03 20:46:22
【问题描述】:

我有一张 PNG 或 BMP 格式的图片。我想在将其压缩为 jpeg 而不保存 jpeg 后找出该图像的文件大小。

到目前为止,我是通过以下方式完成的:

frameNormal.Save("temp.jpg", ImageFormat.Jpeg);
tempFile = new FileInfo("temp.jpg");
filesizeJPG = tempFile.Length;

但由于磁盘访问速度慢,程序耗时过长。 有没有办法计算新创建的 jpeg 的文件大小?就像在内存中转换PNG并读取大小......

非常感谢任何帮助:-)

【问题讨论】:

  • 能否粘贴frame normal的Save方法,然后我们可以得到该方法用于将文件写入磁盘的流的长度
  • @@lupedito ,请点击投票按钮下的复选标记来标记答案

标签: c# image-processing image-manipulation jpeg


【解决方案1】:

你可以这样:

MemoryStream tmpMs = new MemoryStream();
frameNormal.Save(tmpMs, ImageFormat.Jpeg);
long fileSize = tmpMs.Length;

【讨论】:

    【解决方案2】:

    您可以将图像数据写入Stream,而不是提供文件名:

    using (MemoryStream mem = new MemoryStream())
    {
        frameNormal.Save(mem, ImageFormat.Jpeg);
        filesizeJPG = mem.Length;
    }
    

    【讨论】:

    • 正确答案,我想补充一点,为了性能起见,编写一个可以写入但只记录写入字节数的 FakeStream 会很有用
    • 非常感谢您的快速帮助 :-)
    【解决方案3】:

    尝试将其加载到内存而不保存到磁盘。查找MemoryStream

    另外,这个答案可能会有所帮助:How to get the file size of a "System.Drawing.Image"

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多