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的转换.
尝试一次只做一行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)
| 归档时间: |
|
| 查看次数: |
7186 次 |
| 最近记录: |