Tiện ích `convert` của ImageMagick chiếm * quá nhiều * bộ nhớ với đầu vào PDF


11

Tôi thường sử dụng ImageMagick's convertcho * -> chuyển đổi PNG, nhưng khi PDF có hơn 50 trang - convertăn nhiều hơn 3 Gib (!!!) bộ nhớ. Tôi đoán nó đầu tiên tải tất cả mọi thứ.

Điều đó không thể chấp nhận được. Nó nên đọc từng trang PDF, tại sao tất cả chúng cùng một lúc!

Có lẽ có một cách để điều chỉnh nó bằng cách nào đó? Hoặc bất kỳ lựa chọn thay thế tốt?

Câu trả lời:


10

Giải quyết như sau:

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

Bạn đã thử cache chưa?

Từ trang người đàn ông

-cache ngưỡng

      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
Nó là một lựa chọn cho convert? Tôi chỉ có "giới hạn tài nguyên bộ đệm pixel giá trị loại -limit". Cộng với trích dẫn của bạn nói rằng "80Mb là mặc định", nhưng chuyển đổi của tôi ăn hết RAM :)
kolypto

80Mb có thể là mặc định nếu bạn chỉ thêm -cache mà không có giá trị theo sau nó.
Shikoru

1
Hmm, IMagick của tôi chỉ có "-limit memory 64" để giới hạn bộ nhớ ở mức 64MB. Nó hoạt động, cảm ơn nào! :)
kolypto

2
Đã tìm thấy: "-cache <ngưỡng> (Tùy chọn này đã được thay thế bằng tùy chọn
-limit

1
@kolypto Theo cách hiểu của tôi, các trang web ImageMagick nói rằng đơn vị mặc định là byte: "Giá trị của tệp nằm ở số tệp. Các giới hạn khác tính bằng byte. Xác định các đối số cho giới hạn tài nguyên bộ nhớ, bản đồ, khu vực và ổ đĩa với SI tiền tố (.eg 100MB). " imagemagick.org/script/command-line-options.php#limit
thomasa88

8

Tôi đang sử dụng như sau:

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

Ổ đĩa chính của tôi có không gian hạn chế, vì vậy tôi đặt trước một biến

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

Sử dụng -limitdường như để đẩy sử dụng đĩa khi tôi sử dụng nó. Có vẻ kỳ lạ là fantemagick đang sử dụng nhiều bộ nhớ và đĩa như vậy ... vì chắc chắn mỗi người chỉ có thể kết xuất một trang mỗi lần ... nhưng tôi đoán có thể có một số song song đang diễn ra.
Att Righ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.