缓存资源耗尽Imagemagick

时间:2015-07-14 12:46:19

标签: ruby-on-rails linux imagemagick minimagick

我在使用Minimagick的rails应用程序上使用Imagemagick,并使用它生成一些象形图。

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

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

中生成这个角色的所有预览

4 个答案:

答案 0 :(得分:7)

由于内存不足,可能会发生错误。您可以使用以下命令检查资源:

转换-list资源

输出将如下所示:

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"/>

答案 1 :(得分:3)

使用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"/>

参阅convert fails due to resource limits

Memory issues

答案 2 :(得分:1)

确定哪个项目确实导致了问题,但可能是其中之一:

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

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文件。如果要添加许多字体,您可能希望自动执行该过程 - 请参阅我的其他帖子here

2)如果# -fill,您可能需要在MiniMagick选项中转义MiniMagick,或者至少用单引号或双引号括起来将其隐藏起来。通过shell调用 - 我不知道S的来龙去脉。

3)您可能需要引用您希望在单引号或双引号内输出的label字母。

4)您可能需要在convert -limit memory 2GiB -limit map 2GiB -limit disk 4GiB -background none -fill "#000000" -font "TimesNewRoman" -pointsize 300 label:"S" output.png 之后的冒号后删除空格。

我得到的是你的命令可能更像是这样:

http_build_query()

答案 3 :(得分:1)

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