4

Мне нужно как создавать, так и разбивать многостраничные TIFF-изображения размером от 2 до почти 100 страниц (A4, 300 dpi, 2500 × 3500 px). Задание периодически выполняется скриптом на сервере Linux x64. В настоящее время я использую Imagemagick. Меньшие случаи не представляют никаких проблем, но большие делают.

Мне нужно радикально уменьшить количество памяти, используемой во время операции.

Например, это:

convert *.jpg -compress lzw output.tif

(70 файлов JPEG) потребляет около 4,6 ГБ ОЗУ, хотя каждый вход составляет менее 2 МБ, результирующий файл - менее 250 МБ.

Обратная операция:

convert input.tif output-%04d.png

имеет похожие проблемы.

Из того, что я прочитал, это происходит потому, что Imagemagick сначала загружает и декодирует все входные изображения и только после этого начинает кодировать их в выходной файл.

Как я могу создавать и разделять многостраничные изображения TIFF без такого огромного объема памяти? Мне не обязательно использовать ImageMagick, подойдет любой другой бесплатный инструмент.

2 ответа2

1

Я нахожу ответ @ tarikki одним из лучших, потому что он действительно не зависает на сервере и не потребляет оперативную память и дисковое пространство, а работает быстро.

Некоторые улучшения, которые помогли мне:
1. replace END=2000 by END=$(identify -format "%n" bigassfile.tif)
2. Индекс TIF основан на 0, поэтому цикл должен начинаться с 0 и использовать < вместо <= : for((i=0;i<END;i++))

1

У меня была такая же проблема сегодня, когда я пытался разделить 1700 изображений, 1G TIF файл. 16 ГБ памяти было недостаточно, затем попытался кэшировать ее на диске, но это было медленно, и он легко исчерпал более 100 ГБ на жестком диске, ничего не добившись (это, вероятно, было ошибкой).

Но, очевидно, Imagemagick может извлечь конкретный tif из исходного файла, не загружая его полностью, поэтому смог разделить больший файл с помощью простого скрипта bash:

END=2000
for ((i=1;i<=END;i++));do
echo $i
convert bigassfile.tif[$i] -scene 1 split/smallerfile_$i.tif
done

Не знаю, как создать большой файл без нехватки памяти, так что, может быть, это половина ответа?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .