使用ImageMagick加速缩小大型JPEG图像的大小



我有一个非常大的JPEG图像(10800x7497(,我想将其分辨率调整到50%。我已经使用-define jpeg:colors=64将图像颜色减少到64色,但当我尝试调整图像大小时,ImageMagick处理图像需要很长时间,可能需要20分钟或更长时间(因为我在20分钟内没有保存任何输出图像时停止了处理,尽管任务管理器显示ImageMagick正在处理图像(。如何加快此大图像的大小调整?我已经尝试了以下代码,但仍然需要很长时间:

magick -define jpeg:size=10800x7500 "image1.jpg" -resize 5400x3750 "image1-resized.jpg"
magick -define jpeg:size=5400x3750 "image1.jpg" -resize 5400x3750 "image1-resized.jpg"
magick -depth 5 "image1.jpg" -resize 50% "image1-resized.jpg"

听起来您的imagemagik正在交换到光盘。您可能需要调整policy.xml

这是一个包含内存和磁盘magik允许使用的限制的文件。magick文档有一些注释,但请检查/etc/ImageMagick-7/policy.xml并查找行,例如:

<policy domain="resource" name="memory" value="256MiB"/>

256mb内存的使用量太小了——改为:

<policy domain="resource" name="memory" value="8GiB"/>

你会看到很多其他类似的线路,调整它们以适应你的硬件。

我会简单地使用resize-define提示将在加载时打开jpeg收缩,这将失去质量并导致(可能(明显的莫尔条纹。另外,收缩50%没有速度优势。

$ identify big.jpg
big.jpg JPEG 10800x7497 10800x7497+0+0 8-bit sRGB 13.4733MiB 0.000u 0:00.000
$ /usr/bin/time -f %M:%e convert big.jpg -resize 5400x3750 x.jpg
1130340:0.92

因此,使用imagemagik6可以获得0.92s和1.1gb的内存。imagemagick7的速度通常是它的一半,内存使用量是它的两倍,所以我预计大约是2s和2GB。

正如Mark所说,vipsthumbnail可能会更快。我看到了:

$ /usr/bin/time -f %M:%e vipsthumbnail big.jpg -s 5400 -o x.jpg
295460:0.69

因此,300 MB的内存和0.7秒。这台电脑有一个愚蠢的核心数量(32!(,你真的无法从基本的JPEG压缩中获得那么多并行度,所以如果你减少线程数量,你会看到一个有用的加速和更低的内存使用:

$ /usr/bin/time -f %M:%e vipsthumbnail big.jpg -s 5400 -o x.jpg --vips-concurrency=3
77744:0.43

78mb内存和0.43s

相关内容

  • 没有找到相关文章

最新更新