ImageMagick内存使用情况

13

我有100个PNG文件,每个文件的大小都是8250x4090。我需要使用Imagemagick将它们合并成一个大的PNG文件(82500 x 40900),使其成为10行10列的矩阵。我知道代码应该长什么样子,但我遇到了错误:convert.exe: unable to extend cache。

`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的内存和30 GB的免费SSD,但这还不够。图片中包含多边形和线条,最多使用5种不同颜色。最大的PNG文件大小为300 KB。

第二个问题:有没有办法使它更聪明,以便它不会使用那么多空间?

2个回答

19

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

82500 * 40900 * 8 = 约27G字节 82500 * 40900 * 4 = 约13.5 G字节

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

可能ImageMagick正试图保存两份副本--您的100个小图像和大结果。 您可能具有足够的内存和磁盘空间以使用ImageMagick-Q8运行转换。


谢谢。我将您的答案与Mark Setchell的答案结合起来,它起作用了。但是有一个问题:Q8是否有任何缺点,例如较低的质量或类似的问题? - Selphiron
一般来说,Q8 的精度不如 Q16。但对于特定的操作,包括“-append”,如果您的原始 PNG 文件的 bit_depth==8 或更低,则应该是无损的。 - Glenn Randers-Pehrson
我必须承认我不知道如何找出PNG文件的bit_depth。你觉得这个(http://i.imgur.com/Nbm9z8w.png)的bit_depth是8吗? - Selphiron
你会没问题的 - 你只有4种颜色 :-) 像这样检查它 identify -verbose image.png - Mark Setchell

10
尝试每次只做一排10个,做十次 - 这样你就可以得到10排10个。然后做第1行加第2行。然后是第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

您可以在 ImageMagick 的 convert 命令中添加 -debug cache 参数,如下所示:
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 ... 

我也尝试过按行处理,但是仍然出现了相同的错误。我会尝试使用“-debug cache”和“-limit memory”,谢谢! - Selphiron
所以我不得不结合你和 Glenn Randers-Pehrsons 的答案来解决我的问题。我应该接受哪个答案呢? - Selphiron
3
跟随格伦的建议 - 我相信他会很高兴获得他的2,000分! - Mark Setchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接