2

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

4

1 回答 1

5

需要检查的几件事...您的图像对应于大约 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这里描述。

因此,如果您的图像被调用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
于 2015-03-19T09:33:21.257 回答