La utilidad `convert` de ImageMagick toma * demasiada * memoria con entrada de PDF


11

A menudo uso ImageMagick's convertpara la conversión * -> PNG, pero cuando el PDF tiene más de 50 páginas, convertconsume más de 3 Gib (!!!) de memoria. Supongo que primero carga todo.

Eso es inaceptable Debería leer PDF página por página, ¡por qué diablos todos a la vez!

Tal vez hay una manera de sintonizarlo de alguna manera? ¿O alguna buena alternativa?

Respuestas:


10

Resuelto con lo siguiente:

cat <<EOF > /etc/profile.d/ImageMagick.sh
# Set ImageMagick memory limits: it eats too much
export MAGICK_MEMORY_LIMIT=1024 # Use up to *MB of memory before doing mmap
export MAGICK_MAP_LIMIT=1024    # Use up to *MB mmaps before caching to disk
export MAGICK_AREA_LIMIT=4096   # Use up to *MB disk space before failure
export MAGICK_FILES_LIMIT=1024  # Don't open more than *file handles
EOF

9

¿Has probado el caché?

Desde la página del manual

umbral de caché

      megabytes of memory available to the pixel cache.

      Image pixels are stored in memory until 80 megabytes of
      memory have been consumed.  Subsequent pixel operations

      are cached on disk.  Operations to memory are  significantly 
      faster but if your computer does not have a sufficient 
      amount of free memory you may  want  to  adjust
      this threshold value.

1
¿Es una opción para convert? Solo tengo "límite de recursos de caché de píxeles de valor de tipo límite". Además de su cita dice "80Mb es el valor por defecto", pero mis convert come toda la memoria RAM :)
kolypto

80 Mb puede ser el valor predeterminado si solo agrega el caché sin un valor que lo siga.
Shikoru

1
Hmm, mi IMagick solo tiene "-limit memory 64" para limitar su memoria a 64MB. Funciona, gracias de todos modos! :)
kolypto

2
Encontrado: "-cache <umbral> (Esta opción ha sido reemplazada por la opción -limit)"
kolypto

1
@kolypto En mi interpretación, los sitios web de ImageMagick dicen que la unidad predeterminada es bytes: "El valor del archivo está en número de archivos. Los otros límites están en bytes. Defina argumentos para los límites de memoria, mapa, área y recursos de disco con SI prefijos (.eg 100MB) ". imagemagick.org/script/command-line-options.php#limit
thomasa88

8

Estoy usando lo siguiente:

convert -limit memory 64 -limit map 128 original.djvu newfile.pdf

Mi disco principal tiene espacio limitado, así que antepongo una variable

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf

Usando el -limitparecía empujar el uso del disco cuando lo usé. Parece extraño que imagemagick esté usando tanta memoria y disco como es ... ya que seguramente uno puede renderizar solo una página a la vez ... pero supongo que podría haber algún paralelismo.
Att Righ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.