cachebronnen uitgeput Imagemagick

Ik gebruik Imagemagick op een rails-app met Minimagick en ik genereer er een pictogram mee.

Als ik mijn proces start, krijg ik deze fout en ik vind geen oplossing:

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.
):

Mijn proces is eenvoudig, ik heb een .tff-bestand en elk teken is een pictogram. Ik wil gewoon alle voorbeelden van dit personage in png genereren.


Antwoord 1, autoriteit 100%

Zoek de policy.xml met find / -name "policy.xml"

zoiets als /etc/ImageMagick-6/policy.xml

en verander <policy domain="resource" name="disk" value="1GiB"/>in <policy domain="resource" name="disk" value="8GiB"/>

raadpleeg conversie mislukt vanwege resourcelimieten

Geheugenproblemen


Antwoord 2, autoriteit 30%

De fout treedt waarschijnlijk op omdat u onvoldoende geheugen heeft. U kunt de bronnen controleren met het volgende commando:

convert -list resource

De uitvoer zal er ongeveer zo uitzien:

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

Hier kun je zien dat de toegewezen hoeveelheden schijfruimte en geheugen erg klein zijn. Dus om het te wijzigen, moet u het bestand policy.xml wijzigen dat zich ergens in de map /etc/ImageMagick-6 bevindt.
Wijzig <policy domain="resource" name="disk" value="1GiB"/>in <policy domain="resource" name="disk" value="4GiB"/>in het bestand policy.xml.


Antwoord 3, autoriteit 5%

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

Antwoord 4

Ik weet niet precies welk item het probleem veroorzaakt, maar het is waarschijnlijk een van deze:

1) U moet uw lettertype in het op XML gebaseerde lettertypebestand van ImageMagick plaatsen in plaats van een file.ttfop te geven in uw convert-opdracht. Gebruik

. om de lijst met beschikbare lettertypen te krijgen

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
...
...

In het begin ziet u het pad naar het configuratiebestand voor uw lettertypen en u moet dat bewerken om het door u genoemde TTF-bestand op te nemen. Als je veel lettertypen hebt om toe te voegen, wil je het proces misschien automatiseren – zie mijn andere post hier.

2) Mogelijk moet u de #in uw -fill-optie escapen, of deze op zijn minst omringen met enkele of dubbele aanhalingstekens om deze voor de shell te verbergen, als je MiniMagickvia shell aanroept – ik ken de ins en outs van MiniMagickniet.

3) Mogelijk moet u de letter Sdie u wilt uitvoeren tussen enkele of dubbele aanhalingstekens citeren.

4) Mogelijk moet u de spatie na de dubbele punt na labelverwijderen.

Waar ik op doel is dat je commando misschien meer als volgt zou moeten zijn:

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

Other episodes