ImageMagick大图像缓慢调整大小

时间:2014-10-21 08:58:47

标签: resize imagemagick ram

您好我使用imagemagic进行图像调整大小。我有大的 jpg图像20 000px x 8000px 它大概是2.5mb我尝试使用 convert和mogrify 调整大小到95%:

convert -resize 95% source.jpg destination.jpg
mogrify -resize 95% image.jpg

我有免费的6.5 GB RAM然后我尝试调整50%。多数人调整大约20秒,如果我尝试调整大小到95%我只在9分钟后得到结果。什么是最有趣的然后我尝试调整大小到52%我只在4分钟后获得结果这是非常大的差异20秒和4分钟,但调整结果差异只有2%

我在任务管理器中看到然后我开始图像调整大小过程50%。 imagemagic进程非常快速地长大ram像这样:200 MB,400 MB,600 MB等等它大约200 mb / s。然后我调整大小52%-99%ram增长很慢这样:45MB,47MB,51MB等只有2-3 mb / s。然后RAM超过大约1.3~GB完成并获得结果。 我不知道为什么ram会这么慢......

2 个答案:

答案 0 :(得分:1)

我对IM并不熟悉,但一般来说,很明显50%很容易实现:最简单的方法是只采用每个奇数(或偶数)像素。稍微复杂的解决方案是从2x2像素的平方进行平均(除以2或4是简单的,非常快的位移)。可以使用更先进的方法......尽管图像尺寸很大,但仍可以很快实现。

然而,95%或52%比较棘手,因为一个最终像素以某种方式包含来自未连接(浮点...因此更慢)原始像素数量的信息(例如1.05 ...或1.92 ......)这意味着更复杂的计算(为了尝试产生好看的结果),比如双三次重采样(显然IM可以根据源图像决定使用不同的大小调整方法,请参阅here),因此这不是对处理时间的比例影响。

关于RAM,它取决于用于调整大小的方法。 对于50%,图像处理非常快,因此它也快速地完全加载到存储器中(20000px * 8000px * 3B / px-> 480MB +可能是alpha通道)。 然而,其他重采样方法将更慢,并且可能需要更多RAM用于计算。您观察到的结果表明,图像在处理过程中逐渐加载到RAM中,而不是一次性加载。

尝试使用-scale选项,并查看filtering options以调整大小。

答案 1 :(得分:0)

您可以尝试在读入图像时缩放图像,而不是像之后那样:

time convert input.jpg[95%] output.jpg

而不是像这样:

time convert input.jpg -resize 95% output.jpg

前者在我的iMac上快了大约15%。