
Necesito convertir una imagen extremadamente grande. Los límites de recursos predeterminados de Image Magick son demasiado pequeños.
El sitio web de Image Magickdiscute cambiar los límites, pero ninguna de las sintaxis que probé funcionó, los comandos no se reconocen.
Por ejemplo, necesito configurar magick_disk_limit en algo así como 25 GB. Luego habrá una serie de otros para configurar, magick_area_limit, magick_height_limit, etc. ¿Cómo ingreso esos comandos?
Lo que he probado es
-limit width 100KP
convert -limit width 100KP
magick_disk_limit 25GB
MAGICK_DISK_LIMIT 25GB
En todos los casos, la respuesta es comando no encontrado o tipo de recurso no reconocido. También intenté ingresar un comando de conversión con todos los parámetros -limit definidos como parte del comando, así:
convert -limit 100KP 100KP 100GP 14GiB 100GiB unlimited 5 8 0 unlimited Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png
Ahora lo intenté export MAGICK_DISK_LIMIT=25GiB
, pero cuando entré, identify -list resource
el límite de disco no cambió.
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
genera esta lista de advertencias y errores
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.
Respuesta1
fui capaz deencuentre una solución a través del foro ImageMagick.
El método consistía en cambiar la configuración de los límites de recursos en el archivo que maneja ImageMagick, llamado Policy.xml. En Ubuntu 18.04 que se encuentra en /etc/ImageMagick-6
. Está configurado como de solo lectura, por lo que cambié temporalmente los permisos de escritura sudo chmod 777 policy.xml
desde esa carpeta. Después de realizar los cambios, cambié el permiso a 744.
Así es como se ve la sección relevante 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>
Las partes que necesitaban cambios ya tienen los valores que sustituí para poder procesar la imagen en cuestión. Son las líneas 3 a 8, del recurso denominado "memoria" al recurso denominado "disco".
Después de realizar esos cambios, verificar en la terminal identify -list resource
devuelve los nuevos valores.
Respuesta2
No dijiste lo que intentaste y sospecho que un problema de caso " magick_area_limit
" no es lo mismo que " MAGICK_AREA_LIMIT
".
pero aquí hay dos maneras:
Empezar imagemagick
desde un guión:
#!/bin/bash
export MAGICK_DISK_LIMIT=42GiB
export MAGICK_AREA_LIMIT=42MP
# etc ...
imagemagic "$@"
o use el env
comando:
env MAGICK_DISK_LIMIT=42GiB MAGICK_AREA_LIMIT=42MP imagemagick ...
Respuesta3
Estoy usando ubuntu 20.0.4 LTS. Esta es una extensión para responder de @kimholder.
Ir asudo nano /etc/ImageMagick-6/policy.xml
Cambie las líneas siguientes para permitir convertir imágenes de gran tamaño.
<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"/>
Lea también la respuesta original.
https://askubuntu.com/a/1041633/970339
Gracias. Espero que esto se aclare para solucionarlo rápidamente.
Respuesta4
Gestiono este problema en un VPS y no tengo tantos recursos, así que cambie un poco estos 3 valores:
<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 -->
¡Y se puede cambiar el tamaño de la imagen 7803x19208!