web-dev-qa-db-fra.com

Ligne de commande ImageMagick convertir les valeurs -limit

J'ai besoin de convertir une image extrêmement grande. Les limites de ressources par défaut d'Image Magick sont beaucoup trop petites.

Le site Web Image Magick explique comment changer les limites , mais aucune des syntaxes que j'ai essayées n'a fonctionné, les commandes ne sont pas reconnues.

Par exemple, je dois définir magick_disk_limit à quelque chose comme 25 Go. Ensuite, il y aura une série d'autres à définir, magick_area_limit, magick_height_limit, etc. Comment puis-je entrer ces commandes?

Ce que j'ai essayé c'est

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

Dans tous les cas, la réponse est une commande introuvable ou un type de ressource non reconnu. J'ai également essayé d'introduire une commande convert avec tous les paramètres -limit définis dans le cadre de la commande, comme ceci:

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

J'ai maintenant essayé export MAGICK_DISK_LIMIT=25GiB, mais lorsque j'ai entré identify -list resource, la limite du disque n'a pas changé.

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

génère cette liste d'avertissements et d'erreurs

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.
1
kim holder

J'ai été capable de trouver une solution via le forum ImageMagick .

La méthode consistait à modifier les paramètres des limites de ressources dans le fichier qui traitait cela dans ImageMagick, appelé policy.xml. Dans Ubuntu 18.04, cela se trouve dans /etc/ImageMagick-6. Il est défini en lecture seule, j'ai donc temporairement modifié les autorisations d'écriture avec Sudo chmod 777 policy.xml à partir de ce dossier. Après avoir apporté les modifications, je suis passé à 744.

Voici à quoi ressemble la section pertinente de policy.xml:

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

Les parties devant être modifiées ont déjà les valeurs que j'ai substituées afin que je puisse traiter l'image en question. Ils sont la 3ème à la 8ème ligne, la ressource nommée "mémoire" à la ressource nommée "disque".

Une fois ces modifications effectuées, l'archivage du terminal avec identify -list resource renvoie les nouvelles valeurs.

3
kim holder

Vous n'avez pas dit ce que vous aviez essayé et je soupçonne qu'un problème "magick_area_limit" n'est pas identique à "MAGICK_AREA_LIMIT".

mais voici deux manières:

Démarrer imagemagick à partir d'un script:

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

ou utilisez la commande env:

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