Конвертировать несколько PNG в один PDF

У меня есть 280 файлов PNG, которые я хочу объединить и преобразовать в один PDF.

Имена файлов PNG находятся в последовательности p000.png, p001.png и т. Д., И общее пространство составляет около 30 МБ.

Я сделал:

convert p00*.png to myfile.pdf 

и это работало нормально. К счастью, в правильном порядке.

Но, когда я делаю:

conver p*.png to myfile.pdf

Он потребляет все мои 4 Гб памяти и половину моего обмена. Потом вылетает с ошибкой

convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.

Есть идеи, как обойти эту проблему?

Я думаю, что достаточно хорошим решением было бы использовать convert один файл за один раз в pdf, с тем же именем. Тогда используйте pdfunite или же pdftk объединить их. Но я не знаю, как использовать convert в этом случае.

1 ответ

Решение

Imagemagick, кажется, очень сильно использует память. Рекомендуется использовать -limit для ограничения размера памяти, который будет использовать конвертируемый файл, он должен использовать кеш диска для всего остального, что ему нужно. Прочитайте объяснение здесь:

http://www.imagemagick.org/pipermail/magick-users/2002-March/001285.html

А вот как использовать параметр -limit: http://www.imagemagick.org/script/command-line-options.php

Если нет, вы можете сделать это так, как вы описываете, конвертировать каждое изображение в отдельности, а затем объединить их с другим инструментом. Что-то вроде

for name in p*.png; do convert $name `basename $name .png`.pdf; done

должен сделать это.

В основном он перебирает все файлы png, запускает конвертирование для них, единственное волшебство - это basename $name .png часть, которая будет заменена именем файла минус часть.png, так что при присоединении к нему расширения.pdf имя файла имеет смысл.

Попробуйте сами, чтобы вы почувствовали, что делает basename:

basename something.png .png
echo `basename something.png .png`.pdf
Другие вопросы по тегам