使用 Imagemagick 压缩非常大分辨率的图像文件

compress very large resolution image file using Imagemagick

我有一些分辨率为 20400x28056 的扫描图像。我希望使用 imagemagick 压缩它们。我试过了 convert ToBeCompressed.jpeg -quality 70 output.jpeg 但是这个命令让我的笔记本电脑崩溃了。我认为它无法处理如此大的分辨率。有什么建议吗

需要检查的几件事...您的图像对应于大约 1.6GB 的原始数据,因此您可能会发现您需要 运行 64 位环境,而不是 32 位环境。如果您使用 Windows,您可能需要 运行 使用 NTFS 文件系统而不是 FAT,因为 FAT 文件系统虽然最大可达 130GB,但不能支持大于 2GB 的单个文件,或者如果幸运的话,可能是 4GB。

最后,您是否可以考虑调整图像大小而不是降低其质量,如果您在即时调整图像大小阅读它,您可能会做得更好,因为它占用的资源较少。因此,假设您决定接受每边长度减半的图像(原始区域的 1/4)

convert input.jpg[50%x50%] -quality 70 output.jpg

根据您之后实际想要对图像执行的操作,您可以使用 ImageMagick 的 stream 实用程序将图像分割成块。它一次读取一行图像,因此只使用很少的内存。因此,要将图像的两半转换为原始格式,您可以这样做

stream  -extract 20400x14028+0+0     ToBeCompressed.jpg tophalf.rgb
stream  -extract 20400x14028+0+14028 ToBeCompressed.jpg bottomhalf.rgb

然后,如果你想将这些原始 RGB 文件转换为 JPG,你可以这样做

convert -depth 8 -size 20400x14028 tophalf.rgb tophalf.jpg

您可以追求的另一个途径可能是 vips,描述为 here

因此,如果您的图片名为 BigBoy.jpg,您可以将质量设置为 60,例如:

vips jpegsave BigBoy.jpg BB60.jpg --Q=60

这导致我的系统出现这种情况

ls -l Bi* BB60.jpg
-rw-r--r--  1 mark  staff  270283175 19 Mar 14:17 BB60.jpg
-rw-r--r--  1 mark  staff  997198223 19 Mar 14:07 BigBoy.jpg