ImageMagick内存使用情况

Sel*_*ron 5 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.
Run Code Online (Sandbox Code Playgroud)

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

Gle*_*son 15

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

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

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

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


Mar*_*ell 7

尝试一次只做一行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
Run Code Online (Sandbox Code Playgroud)

然后

convert row1.png row2.png -append row1and2.png
Run Code Online (Sandbox Code Playgroud)

您可以像这样添加-debug cache到ImageMagick convert命令:

convert -debug cache 1.png 2.png 3.png ... +append row1.png
Run Code Online (Sandbox Code Playgroud)

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

identify -list resource

File         Area       Memory          Map         Disk    Thread         Time
-------------------------------------------------------------------------------
 768     1.0386GB    3.8692GiB    7.7384GiB    unlimited         4    unlimited
Run Code Online (Sandbox Code Playgroud)

并增加这样的资源:

convert -limit memory 32MiB ... 
Run Code Online (Sandbox Code Playgroud)

  • 选择 Glenn's - 我相信他会很高兴获得 2,000 分! (3认同)