Utilitas `convert` ImageMagick mengambil * terlalu banyak * memori dengan input PDF

11

Saya sering menggunakan ImageMagick convertuntuk * -> konversi PNG, tetapi ketika PDF memiliki lebih dari 50 halaman - convertmemakan lebih dari 3 Gib (!!!) memori. Saya kira itu pertama memuat segalanya.

Itu tidak bisa diterima. Seharusnya membaca halaman PDF demi halaman, mengapa sih semuanya sekaligus!

Mungkin ada cara untuk menyelaraskannya? Atau alternatif yang bagus?

kolypto
sumber

Jawaban:

10

Diselesaikan dengan yang berikut:

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

Sudahkah Anda mencoba cache?

Dari halaman manual

ambang batas cache

      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
sumber
1
Apakah ini opsi untuk convert? Saya hanya memiliki "batas sumber daya cache pixel nilai tipe". Ditambah kutipan Anda mengatakan "80 MB adalah default", tapi saya makan mengkonversi semua RAM :)
kolypto
80MB mungkin merupakan default jika Anda hanya menambahkan -cache tanpa nilai yang mengikutinya.
Shikoru
1
Hmm, IMagick saya hanya memiliki "-limit memory 64" untuk membatasi memorinya hingga 64MB. Itu berhasil, terima kasih! :)
kolypto
2
Ditemukan: "-cache <threshold> (Opsi ini telah digantikan oleh opsi -limit)"
kolypto
1
@ polypto Dalam interpretasi saya, situs web ImageMagick mengatakan bahwa unit default adalah byte: "Nilai file dalam jumlah file. Batas lainnya adalah dalam byte. Tentukan argumen untuk memori, peta, area, dan batas sumber daya disk dengan SI awalan (.eg 100MB). " imagemagick.org/script/command-line-options.php#limit
thomasa88
8

Saya menggunakan yang berikut ini:

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

Drive utama saya memiliki ruang terbatas, jadi saya menambahkan variabel

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf
dufte
sumber
Menggunakan -limitsepertinya mendorong penggunaan disk ketika saya menggunakannya. Tampaknya aneh bahwa imagemagick menggunakan memori dan disk sebanyak itu ... karena tentu saja seseorang dapat merender hanya satu halaman pada suatu waktu ... tapi saya kira mungkin ada paralelisme yang terjadi.
Att Righ