缓存资源用尽Imagemagick

Gre*_*rot 4 linux memory ruby-on-rails 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.
):
Run Code Online (Sandbox Code Playgroud)

我的过程很简单,我有一些.tff文件,每个字符都是一个象形图。我只想生成此角色在png中的所有预览

小智 17

发生该错误的原因可能是内存不足。您可以使用以下命令检查资源:

转换 -list 资源

输出将有点像这样:

Resource limits:
  Width: 16KP   
  Height: 16KP   
  Area: 128MP   
  Memory: 256MiB   
  Map: 512MiB   
  Disk: 1GiB   
  File: 768   
  Thread: 8   
  Throttle: 0   
  Time: unlimited
Run Code Online (Sandbox Code Playgroud)

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


Kri*_*ofe 8

用以下命令找到policy.xml find / -name "policy.xml"

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

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

由于资源限制,引用转换失败

记忆问题

  • [恕我直言]使用 `locate "policy.xml"` 比在整个文件系统上运行 `find` 更有效...... (2认同)

Joh*_*ias 6

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
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell -1

不确定到底是哪个项目导致了您的问题,但可能是其中之一:

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

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
...
...
Run Code Online (Sandbox Code Playgroud)

一开始,您将看到字体配置文件的路径,您需要编辑该路径以包含您提到的 TTF 文件。如果您要添加大量字体,您可能希望自动化该过程 - 请参阅我的其他帖子

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

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

4) 您可能需要删除 后面冒号后面的空格label

我的意思是你的命令可能应该更像这样:

convert -limit memory 2GiB -limit map 2GiB -limit   disk 4GiB -background none -fill "#000000" -font "TimesNewRoman" -pointsize 300 label:"S" output.png
Run Code Online (Sandbox Code Playgroud)