Архив рубрики: ImageMagick

Разрешаем Имиджмеджику делать PDF

ImageMagick позволяет собирать многостраничный PDF-файл из нескольких растровых картинок, но не всегда — на некоторых компьютерах выдаёт ошибку

convert: not authorized `result.pdf' @ error/constitute.c/WriteImage/1028.

Причина — в том, что в конкретном экземпляре может быть запрещено создавать PDF, но есть рецепт, как это исправить: в файле /etc/ImageMagick-6/policy.xml надо включить нужное разрешение — строку

<policy domain="coder" rights="none" pattern="PDF" />

надо заменить на 

<policy domain="coder" rights="read|write" pattern="PDF" />

После этого PDF-файл будет нормально создаваться.

Теперь осталось понять, почему же готовый файл вдвое тяжелее суммы исходных. Добавление в команду преобразования параметров -dither none -colors 2 на размер готового файла практически не влияет.

Выделение ресурсов на преобразование картинок

ImageMagick иногда падает, ругаясь на исчерпание ресурсов:

convert-im6.q16: DistributedPixelCache ‘127.0.0.1’ @ error/distribute-cache.c/ConnectPixelCacheServer/244.
convert-im6.q16: cache resources exhausted `/tmp/magick-7601a0NxF7K2WOIO4′ @ error/cache.c/OpenPixelCache/3945.

несмотря на то, что на компьютере хватает и оперативной памяти, и места на диске. Решение нашлось в одном из комментариев к описанию этой проблемы: надо изменить объём доступной имиджмеджику памяти — он указывается в файле /etc/ImageMagick-6/policy.xml

Фрагмент файла policy.xml из настроек ImageMagick

Я увеличил указанные там величины вдвое — не помогло, увеличил ещё вдвое — хватило.

Как засунуть имиджмеджиком растровые картинки в PDF нужного размера

Для несложных преобразований картинок: изменение размера, увеличение резкости, добавление надписей и преобразование типов — большой и тяжёлый графический редактор не нужен — достаточно взять ImageMagick. ImageMagick знает не только кучу разных растровых форматов файлов, но и кое-какие векторные, в том числе PDF, однако преобразование в них требует иногда плясок с бубном: например, если для преобразования толпы PNG-файлов написать

convert *png result.pdf

то результат может и не понравиться. Путём экспериментов с найденным на всяких форумах кодом получился такой рецепт для преобразования в PDF размером 210×297 мм (A4) кучи растровых файлов, отсканированных с разрешением 600 точек на дюйм

convert *png -units pixelsperinch -density 600 -resize 100% \
 -gravity center -background white -extent 4960x7016 result.pdf

размер растровых файлов не меняется, они располагаются в центре получившихся страниц.

PDF-файл с разным заполнением страниц