В прошлый раз, когда я использовал convert
для такой задачи, я явно указал размер места назначения с помощью изменения размера:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
Команда convert
не всегда использует DPI в качестве единицы измерения плотности / формата страницы по умолчанию, поэтому мы явно указываем DPI с помощью этой -units
опции (в противном случае вы можете получить разные результаты с разными комбинациями версий / форматов ввода). Новый размер (указанный через -resize
) - это размер страницы DIN A4 в пикселях. Аргумент resize указывает максимальный размер страницы. Какое разрешение и качество выбрать точно, зависит от варианта использования - я выбрал 150 DPI и среднее качество, чтобы сэкономить место, хотя при печати на бумаге он выглядит не так уж плохо.
Обратите внимание, что convert
по умолчанию не изменяется соотношение сторон с помощью операции изменения размера:
Изменение размера подгонит изображение под требуемый размер. НЕ заполняет, запрошенный размер коробки.
( Руководство по ImageMagick )
В зависимости от версии ImageMagick и задействованных форматов ввода, возможно, можно пропустить этот -repage
параметр. Но иногда это требуется, и без этой опции заголовок PDF может содержать слишком маленькие размеры. В любом случае, -repage
не должно быть больно.
В вычислениях используется целочисленная арифметика, поскольку это bash
поддерживается только. С zsh
помощью выражений можно упростить - т.е. заменить на $((i*8.27))x$((i*11.69))
.
Lineart Images
Если файлы PNG представляют собой двухуровневые (черно-белые или линейные) изображения, тогда img2pdf
инструмент дает превосходные результаты по сравнению с ImageMagick convert
. Это означает, img2pdf
что быстрее и дает меньше PDF-файлов.
Пример:
$ img2pdf -o multipage.pdf a.png b.png
или же:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
я получаюinvalid argument for option '-repage': a4
-repage
она больше не поддерживает имя a4. Я работал над этим с помощью арифметики оболочки:-repage $((150*8.27))x$((150*11.69))
-density 150
аргумент было важно добавить.Что вы действительно хотите использовать:
-extent
фактически расширяет изображение до 1240x1753, сохраняя при-resize
этом соотношение изображения, подгоняя его либо к,1240x...
либо...x1753
.-gravity
Параметр является необязательным , но может быть использован для размещения изображения при расширении.источник
-extent
это действительно то, что я хочу использовать :) - пожалуйста, добавьте пропущенную левую кавычку перед -extent, спасибо!Дополнение к ответу Каугнера :
установив IM v6.6.9-7, я обнаружил, что
-gravity
параметр должен быть помещен между-resize
и-extent
иметь эффект.Кроме того (хотя это и не часть оп-вопроса), я обнаружил, что задан другой привлекательный цвет фона, в результате чего общая команда
Еще один полезный вариант, который я часто использую, когда не хочу изменять масштаб изображения, которое уже имеет правильное соотношение сторон, но сохраняет свое индивидуальное разрешение.
где целевая плотность определяется динамически путем вычисления ширины, деленной на 8,27 (которая является шириной в дюймах страницы А4).
-repage a4
параметр можно опустить большую часть времени , но у меня было несколько случаев , когда в результате .pdf будет иметь другой формат sligtly от размеров А4 210х297мм (8.27x11.6" )источник
Я обнаружил, что код Михера очень полезен, однако он полностью отображает PDF-файл как книжный или альбомный, поэтому я изменил его, чтобы проверить макет каждого входного файла и сопоставить его в выходных данных.
Я не включил редактирование Yotam, поскольку оно работает без него на моем Ubuntu 15.04.
источник
Мне кажется удобным следующий скрипт, который объединяет ответы, перечисленные здесь, а также некоторые проблемы, которые у меня были с вычислением с плавающей запятой:
Скрипт вызывается (сохраняется как файл images2pdf)
/ edit: Добавлен флаг "-l" в соответствии с комментарием tanius для большей точности.
источник
$(echo "150*8.27" | bc)
все еще не подходит для плавающей запятой. Здесь работает, потому что это умножение. Для,$(echo "150/8.27" | bc)
хотя, результат -18
(урезанный к целому числу). Вместо этого звонитеbc
с более высокимscale
:,$(echo "150/8.27" | bc -l)
результаты есть18.137847…
.Я тоже боролся с этим. Основываясь на вышеупомянутой информации, я написал скрипт, который добавляет отсортированные по алфавиту файлы изображений в один PDF.
Некоторые переменные устанавливаются внутри скрипта. Это зависит от ImageMagick и pdftk.
NB. Если входное изображение имеет более высокое разрешение (т / д), чем требуемое разрешение файла output.pdf, то изображение повторно дискретизируется до более низкого разрешения. В противном случае изображение не пересэмплируется и расширяется только для соответствия холсту страницы.
источник
-set density $ImgDens
на-density $ImgDens
Я настоятельно рекомендую программу Python CLI
img2pdf
для преобразования без потерь:https://gitlab.mister-muffin.de/josch/img2pdf
Пример использования:
источник
Я просто использовал что-то похожее на ответ maxschlepzigs под Ubuntu 16.04 / ImageMagick
Это также центрирует результат
источник
Я хотел преобразовать изображение в размер страницы 5,00 x 8,00 дюйма (при просмотре из Adobe Reader). Вот что я сделал на Ubuntu 18.04 OS. Во-первых, выясните, какой размер страницы мне нужен, вот так:
И возвращение: Размер страницы: 360 х 576 баллов
Затем изображение преобразуется в PDF такого же размера, например:
Примечание: установить img2pdf
источник