ImageMagick-Befehlszeilenkonvertierung - Grenzwerte

ImageMagick-Befehlszeilenkonvertierung - Grenzwerte

Ich muss ein extrem großes Bild konvertieren. Die standardmäßigen Ressourcenbeschränkungen von Image Magick sind viel zu klein.

Die Image Magick-Websitediskutiert die Änderung der Grenzwerte, aber keine der Syntaxen, die ich ausprobiert habe, hat funktioniert, die Befehle werden nicht erkannt.

Ich muss beispielsweise das magick_disk_limit auf etwa 25 GB festlegen. Dann müssen noch eine Reihe anderer Werte festgelegt werden, magick_area_limit, magick_height_limit usw. Wie gebe ich diese Befehle ein?

Was ich versucht habe ist

-limit width 100KP
convert -limit width 100KP
magick_disk_limit 25GB
MAGICK_DISK_LIMIT 25GB

In allen Fällen lautet die Antwort entweder „Befehl nicht gefunden“ oder „Ressourcentyp nicht erkannt“. Ich habe auch versucht, einen Konvertierungsbefehl mit allen -limit-Parametern einzugeben, die als Teil des Befehls definiert sind, wie folgt:

convert -limit 100KP 100KP 100GP 14GiB 100GiB unlimited 5 8 0 unlimited Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

Ich habe es jetzt versucht export MAGICK_DISK_LIMIT=25GiB, aber als ich es dann eingegeben habe, identify -list resourcehat sich das Datenträgerlimit nicht geändert.

convert -limit memory 12GB -limit map 25GiB -limit width 10MP -limit height 10MP -limit area 100GP -limit disk 30GiB Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

generiert diese Liste von Warnungen und Fehlern

convert-im6.q16: Unknown field with tag 33550 (0x830e) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 33922 (0x8482) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34735 (0x87af) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34736 (0x87b0) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34737 (0x87b1) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42112 (0xa480) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42113 (0xa481) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: width or height exceeds limit `Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif' @ error/cache.c/OpenPixelCache/3837.
convert-im6.q16: no images defined `MoonRelief.png' @ error/convert.c/ConvertImageCommand/3258.

Antwort1

Ich war in der LageFinden Sie eine Lösung im ImageMagick-Forum.

Die Methode bestand darin, die Einstellungen für Ressourcenbeschränkungen in der Dateiverwaltung in ImageMagick zu ändern, die policy.xml heißt. In Ubuntu 18.04 befindet sie sich in /etc/ImageMagick-6. Sie ist auf schreibgeschützt eingestellt, daher habe ich die Schreibberechtigungen sudo chmod 777 policy.xmlinnerhalb dieses Ordners vorübergehend geändert. Nachdem ich die Änderungen vorgenommen hatte, habe ich die Berechtigung auf 744 geändert.

So sieht der entsprechende Abschnitt der Datei policy.xml aus:

<policymap>
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- not needed due to the need to use explicitly by mvg: -->
  <!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
  <!-- use curl -->
  <policy domain="delegate" rights="none" pattern="URL" />
  <policy domain="delegate" rights="none" pattern="HTTPS" />
  <policy domain="delegate" rights="none" pattern="HTTP" />
  <!-- in order to avoid to get image with password text -->
  <policy domain="path" rights="none" pattern="@*"/>
  <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
</policymap>

Die Teile, die geändert werden mussten, haben bereits die Werte, die ich ersetzt habe, damit ich das betreffende Bild verarbeiten kann. Es handelt sich um die 3. bis 8. Zeile, die Ressource mit dem Namen „Speicher“ bis zur Ressource mit dem Namen „Festplatte“.

Nachdem Sie diese Änderungen vorgenommen haben, werden beim Einchecken im Terminal identify -list resourcedie neuen Werte zurückgegeben.

Antwort2

Sie haben nicht gesagt, was Sie versucht haben, und ich vermute ein Groß-/Kleinschreibungsproblem: „ magick_area_limit“ ist nicht dasselbe wie „ MAGICK_AREA_LIMIT“.

aber es gibt zwei Möglichkeiten:

Beginnen Sie imagemagickmit einem Skript:

#!/bin/bash
export MAGICK_DISK_LIMIT=42GiB
export MAGICK_AREA_LIMIT=42MP
# etc ...
imagemagic "$@"

oder verwenden Sie den envBefehl:

env MAGICK_DISK_LIMIT=42GiB MAGICK_AREA_LIMIT=42MP imagemagick ...

Antwort3

Ich verwende Ubuntu 20.0.4 LTS. Dies ist eine Erweiterung zur Antwort von @kim holder

Gehe zusudo nano /etc/ImageMagick-6/policy.xml

Ändern Sie die folgenden Zeilen, um die Konvertierung von Bildern mit großer Größe zu ermöglichen.

  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>

Lesen Sie auch die ursprüngliche Antwort
https://askubuntu.com/a/1041633/970339

Danke, ich hoffe, das klärt die Angelegenheit, sodass die Lösung schnell durchgeführt werden kann.

Antwort4

Ich verwalte dieses Problem auf einem VPS und habe nicht so viele Ressourcen, also ändere einfach diese 3 Werte ein wenig:

<policy domain="resource" name="width" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="height" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="disk" value="3GiB"/> <!-- default 1GiB -->

und die Größe des Bildes 7803 x 19208 könnte geändert werden!

verwandte Informationen