【问题标题】:ImageMagick memory usageImageMagick 内存使用情况
【发布时间】:2015-01-06 01:57:14
【问题描述】:

我有 100 个 PNG 文件,每个文件都是 8250x4090 大。我需要用 Imagemagick 将它们附加到一个大的 PNG 文件(82500 x 40900),这样我就有 10 rows and 10 columns 。我知道代码必须是什么样子,但我得到了错误: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) 第二个问题:有没有办法让它更聪明,这样它就不会占用那么多空间?

【问题讨论】:

    标签: imagemagick imagemagick-convert


    【解决方案1】:

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

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

    PNG 的大小无关紧要; ImageMagick 以未压缩的形式存储它们。

    可能 ImageMagick 正在尝试保存两个副本——您的 100 个小图像加上大结果。您可能有足够的内存和磁盘来使用 ImageMagick-Q8 运行转换。

    【讨论】:

    • 谢谢。我将您的答案与 Mark Setchells 的答案结合起来,它奏效了。但有一个问题:Q8 是否有任何缺点,例如质量较低或类似的东西?
    • 作为一般规则,Q8 不会像 Q16 那样准确。但对于特定操作,包括“-append”,如果您的原始 PNG 文件的 bit_depth==8 或更少,它应该是无损的。
    • 我必须承认我不知道如何找出 PNG 文件的 bit_depth。你认为这个 (i.imgur.com/Nbm9z8w.png) 的 bit_depth 是 8 吗?
    • 你会没事的 - 你只有 4 种颜色 :-) 像这样自己检查identify -verbose image.png
    【解决方案2】:

    尝试一次只做一行 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
    

    您可以像这样将-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 ... 
    

    【讨论】:

    • 我也有行的想法,但我仍然有同样的错误。我会尝试 -debug cache 和 -limit memory ,谢谢!
    • 所以我不得不结合你和 Glenn Randers-Pehrsons 的答案来解决我的问题。我必须接受哪个答案?
    • 和格伦一起去 - 我相信他会很高兴得到他的 2000 分!
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2015-02-03
    • 2012-05-30
    • 2021-02-26
    • 2010-10-24
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多