我刚刚从http://jpegclub.org/jpegtran/下载了最新的 win32 jpegtran.exe并观察到以下内容:
我准备了一个 14500 x 10000 像素的 24 BPP jpeg 测试图像。
- 文件系统中的压缩大小约为7.5 MB。
- 解压缩到内存(使用一些图像查看器)膨胀到450 MB左右。
在无损旋转(180)期间监控 jpegtran.exe 命令行工具的内存消耗,我可以看到该进程消耗高达900 MB内存!
我会假设这种jpeg 无损转换不需要将图像文件解码到内存中,而是只需对编码文件本身执行一些数学转换 - 保持内存占用非常低。
那么以下哪项是正确的?
- 这个特定工具的实现中的一些错误
- 我错过了一些配置开关
- 我的一些误解(即jpeg无损转换也需要将图像解码到内存中?)
- “数学运算”比“将图像解码到内存”消耗更多的内存
编辑:
根据 JasonD 的回答,原因似乎是后者。所以我会扩展我的问题:
是否有任何实现可以在小块中执行这些操作(以避免高内存使用)?或者它总是需要整体完成并且没有办法解决它?
PS:
我不打算实现自己的编解码器/算法。相反,我问是否有任何满足我的要求的实现。或者至少理论上可以。