O utilitário `convert` do ImageMagick consome * muita * memória com entrada de PDF

11

Costumo usar o ImageMagick convertpara conversão * -> PNG, mas quando o PDF tem mais de 50 páginas - convertconsome mais que 3 gib (!!!) de memória. Eu acho que primeiro carrega tudo.

Isso é inaceitável. Deve ler PDF página por página, por que diabos todos eles de uma vez!

Talvez haja uma maneira de ajustá-lo de alguma forma? Ou alguma boa alternativa?

Kolypto
fonte

Respostas:

10

Resolvido com o seguinte:

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
Kolypto
fonte
9

Você já tentou cache?

Na página do manual

-cache threshold

      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.
Shikoru
fonte
1
É uma opção para convert? Eu tenho apenas "limite de recursos de cache de pixel de valor de tipo limite". Além disso, sua cotação diz "80Mb é o padrão", mas meus converter come toda a memória RAM :)
kolypto
80Mb pode ser o padrão se você apenas adicionar o -cache sem um valor a seguir.
21410 Shikoru
1
Hmm, meu IMagick possui apenas "memória limitada de 64" para limitar sua memória a 64 MB. Funciona, obrigado mesmo assim! :)
kolypto
2
Encontrado: "-cache <threshold> (Esta opção foi substituída pela opção -limit)"
kolypto
1
@kolypto Na minha interpretação, os sites do ImageMagick dizem que a unidade padrão é bytes: "O valor do arquivo está em número de arquivos. Os outros limites estão em bytes. Defina argumentos para os limites de memória, mapa, área e recursos de disco com o SI prefixos (.eg 100MB). " Você pode
usar o seguinte código
8

Estou usando o seguinte:

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

Minha unidade principal possui espaço limitado, portanto, prefiro uma variável

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf
dufte
fonte
Usar o -limitparecia empurrar o uso do disco quando eu o usei. Parece estranho que o imagemagick esteja usando tanta memória e disco quanto é ... já que certamente é possível renderizar apenas uma página de cada vez ... mas acho que pode haver algum paralelismo em andamento.
Att Righ