ImageMagick使用LZW压缩tif文件输出超大体积文件问题咨询
压缩失效核心原因
问题和压缩依赖、算法支持无关,从版本输出可以看到程序已经内置了lzma、zip、zlib等全部压缩所需的内置组件,失效的根本原因是mogrify命令的参数顺序写反了。
ImageMagick全系列命令对参数顺序有严格的解析规则:所有操作参数必须放在待处理文件的路径/通配符之前,当程序读取到文件路径时,就会判定前面的内容为全部有效处理参数,后面追加的内容不会被纳入当前处理流程。
你执行的命令mogrify *.tif -resize 20% -compress lzw中,把文件通配符*.tif放在了所有操作参数的最前面,后续的缩放、压缩参数完全没有被程序识别,实际执行的是默认参数下的TIFF文件重写操作。后续测试mogrify *.tif -compress zip时同样存在参数顺序错误,因此压缩设置始终没有生效。
所有输出文件统一为138MB的现象,和你使用的Q16-HDRI版本特性匹配:该版本默认以每通道16位浮点精度存储图像数据,TIFF格式默认输出为无压缩状态,由于你所有输入文件尺寸一致,缩放后输出的像素总量完全相同,因此生成的文件大小完全一致,和原文件体积没有关联。
修复方案
将待处理文件的通配符移动到所有操作参数的末尾即可,注意执行前先备份原文件,mogrify会直接覆盖原文件:
- LZW压缩+20%缩放的正确命令:
mogrify -resize 20% -compress lzw *.tif
- ZIP压缩+20%缩放的正确命令:
mogrify -resize 20% -compress zip *.tif
如果不需要HDRI高动态范围的浮点精度存储,也可以更换为非HDRI的Q16/Q8版本ImageMagick,输出文件体积会进一步缩小。
内容的提问来源于stack exchange,提问作者Martin Smith
相关产品推荐
相关产品推荐

