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