确定jpeg filesize而不实际保存jpeg

lup*_*ito 4 c# jpeg image-manipulation image-processing

我有PNG或BMP格式的图像.我想在不保存 jpeg的情况下将其压缩为jpeg之后找出该图像的文件大小.

到目前为止,我通过以下方式做到了:

frameNormal.Save("temp.jpg", ImageFormat.Jpeg);
tempFile = new FileInfo("temp.jpg");
filesizeJPG = tempFile.Length;
Run Code Online (Sandbox Code Playgroud)

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

很感谢任何形式的帮助 :-)

C.E*_*uis 7

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

using (MemoryStream mem = new MemoryStream())
{
    frameNormal.Save(mem, ImageFormat.Jpeg);
    filesizeJPG = mem.Length;
}
Run Code Online (Sandbox Code Playgroud)

  • 正确的答案,我想补充一点,为了性能,写一个你可以编写的FakeStream是有用的,但只记录写入的字节数 (4认同)