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

Shi*_*yal 2 compression image imagemagick mogrify

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

Mar*_*ell 5

要检查的一些事项......您的图像对应于大约1.6GB的原始数据,因此您可能会发现需要运行64位环境而不是32位环境.如果您使用的是Windows,则可能需要在NTFS文件系统而不是FAT上运行,因为FAT文件系统虽然大小可达130GB,但不能支持大于2GB的单个文件,如果运气不好,可能不支持4GB.

最后,您是否可以考虑调整图像大小而不是降低图像质量,如果您阅读时动态调整图像大小,您可能会做得更好,因为它资源消耗较少.所以,假设您决定接受每侧一半长度的图像(原始区域的1/4)

convert input.jpg[50%x50%] -quality 70 output.jpg
Run Code Online (Sandbox Code Playgroud)

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

stream  -extract 20400x14028+0+0     ToBeCompressed.jpg tophalf.rgb
stream  -extract 20400x14028+0+14028 ToBeCompressed.jpg bottomhalf.rgb
Run Code Online (Sandbox Code Playgroud)

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

convert -depth 8 -size 20400x14028 tophalf.rgb tophalf.jpg
Run Code Online (Sandbox Code Playgroud)

你可以追求的另一种途径可能vips就是这里所描述的.

因此,如果调用图像,则BigBoy.jpg可以将质量设置为60,例如:

vips jpegsave BigBoy.jpg BB60.jpg --Q=60
Run Code Online (Sandbox Code Playgroud)

这导致我的系统

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
Run Code Online (Sandbox Code Playgroud)