缓存耗尽的资源

我正在使用一个应用程序的轨道上的想象与迷你想象和我生成一些图形与它。

当我启动我的流程时,我遇到了这个错误,而且我没有找到解决方案:

MiniMagick::Error (`convert -limit memory 2GiB -limit map 2GiB -limit   disk 4GiB -background none -fill #000000 -font ttf/SELIS006N.ttf -pointsize 300 label: S public/pictogram_images/RECINTAN-EL-064-layer-1.png` failed with error:
convert.im6: cache resources exhausted ` S' @ error/cache.c/OpenPixelCache/4078.
convert.im6: no images defined `public/pictogram_images/RECINTAN-EL-064-layer-1.png' @ error/convert.c/ConvertImageCommand/3044.
):

我的方法很简单,我有一些。Tff 文件,每个字符是一个象形图。我只想用 png 生成这个字符的所有预览。

40867 次浏览

不知道究竟是哪一项导致了你的问题,但它可能是其中之一:

1)您需要将字体放入 ImageMagick 的基于 XML 的字体文件中,而不是在 convert命令中指定 file.ttf。若要获取可用字体列表,请使用

identify -list font | more


Path: /Users/mark/.magick/type.xml          <--- Edit your font into here
Font: ACaslonPro
family: unknown
style: Undefined
stretch: Undefined
weight: 0
glyphs: /Library/Fonts/ACaslonPro-Regular.otf
Font: ACaslonPro-Semibold
family: unknown
style: Undefined
stretch: Undefined
weight: 0
glyphs: /Library/Fonts/ACaslonPro-Semibold.otf
...
...

在开始时,您将看到字体的配置文件的路径,您需要编辑它来包含您提到的 TTF 文件。如果你有很多字体要添加,你可能喜欢自动化的过程-见我的其他文章 给你

2)如果你的 MiniMagick通过 shell 调用,你可能需要在你的 -fill选项中转义 #,或者至少用单引号,或者双引号来隐藏它,如果你的 MiniMagick通过 shell 调用——我不知道 MiniMagick的输入和输出。

3)你可能需要在单引号或双引号中引用你想要输出的字母 S

4)您可能需要删除后面的结肠空间 label

我想说的是,你的指挥方式应该更像这样:

convert -limit memory 2GiB -limit map 2GiB -limit   disk 4GiB -background none -fill "#000000" -font "TimesNewRoman" -pointsize 300 label:"S" output.png

使用 find / -name "policy.xml"查找 policy. xml

就像 /etc/ImageMagick-6/policy.xml

<policy domain="resource" name="disk" value="1GiB"/>改成 <policy domain="resource" name="disk" value="8GiB"/>

请参阅 由于资源限制,转换失败

记忆问题

出现错误可能是因为内存不足:

转换列表资源转换列表资源

输出大致如下:

Resource limits:
Width: 16KP
Height: 16KP
Area: 128MP
Memory: 256MiB
Map: 512MiB
Disk: 1GiB
File: 768
Thread: 8
Throttle: 0
Time: unlimited

在这里,您可以看到分配的磁盘空间和内存量非常小。因此,为了修改它,您需要更改位于/etc/ImageMagick-6目录中的 policy. xml 文件。
在 policy. xml 文件中将 <policy domain="resource" name="disk" value="1GiB"/>更改为 <policy domain="resource" name="disk" value="4GiB"/>

sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml //this one is just to solve convertion from .tiff to pdf, you may need it some day
sed -i -E 's/name="memory" value=".+"/name="memory" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sed -i -E 's/name="map" value=".+"/name="map" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sed -i -E 's/name="area" value=".+"/name="area" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sed -i -E 's/name="disk" value=".+"/name="disk" value="8GiB"/g' /etc/ImageMagick-6/policy.xml