ImageMagick内存使用情况

时间:2014-11-09 19:32:27

标签: imagemagick imagemagick-convert

我有100个PNG文件,每个文件大小为8250x4090。我需要将它们与Imagemagick一起附加到一个大的PNG文件(82500 x 40900),这样我就有10行10列。我知道代码必须如何,但我得到错误:convert.exe:无法扩展缓存

`C:\Row_345.png': No space left on device @ error/cache.c/OpenPixelCache/3689.
convert.exe: Memory allocation failed `C:\Row_345.png' @ error/png.c/WriteOnePNGImage/8725.

第一个问题:需要多少空间(大约)?我有8 GB的Ram和30 GB的免费SSD,但还不够。这些图片包含多达5种不同颜色的多边形和线条。最大的PNG是300 KB) 第二个问题:有没有办法让它更聪明,以便它不会使用那么多空间?

2 个答案:

答案 0 :(得分:13)

如果使用Q16版本,ImageMagick每像素需要8个字节。 Q8版本每个像素只需要4个字节。

82500 * 40900 * 8 =约27Gbytes 82500 * 40900 * 4 =约13.5 GB

PNG的大小无关紧要; ImageMagick将它们保存为未压缩的。

可能ImageMagick试图保留两份 - 你的100张小图片加上大的结果。可能你有足够的内存和磁盘来运行ImageMagick-Q8的转换。

答案 1 :(得分:6)

尝试一次只做一行10次,十次 - 所以你得到10行10然后做row1加row2。然后是第1行和第2行以及第3行。

convert 1.png 2.png 3.png ... +append row1.png
convert 11.png 12.png 13.png ... +append row2.png
...
convert 91.png 92.png 93.png ... +append row10.png

然后

convert row1.png row2.png -append row1and2.png

您可以将-debug cache添加到ImageMagick convert命令中,如下所示:

convert -debug cache 1.png 2.png 3.png ... +append row1.png

您还可以查看资源设置,了解ImageMagick的可用内容,如下所示:

identify -list resource

File         Area       Memory          Map         Disk    Thread         Time
-------------------------------------------------------------------------------
 768     1.0386GB    3.8692GiB    7.7384GiB    unlimited         4    unlimited

并增加这样的资源:

convert -limit memory 32MiB ...