#linux #pdf #imagemagick #image-manipulation #image-gallery
#linux #PDF #imagemagick #манипулирование изображениями #изображение-галерея
Вопрос:
У меня есть большая коллекция изображений в формате jpeg с одинаковым соотношением сторон, но не обязательно с одинаковым разрешением. Мне нужно объединить их в один (или несколько) PDF-документов с несколькими изображениями, отображаемыми на странице.
Мне нужно указать целевой размер страницы (a4 / letter), и мне нужен точный контроль над конечным размером объединенных изображений.
Сценарий выглядит примерно так: «объединение списка паспортных фотографий для печати».
Я попробовал монтаж из Imagemagick, но я не могу выполнить масштабирование. Если бы все изображения имели одинаковое разрешение, я мог бы попытаться найти несколько чисел вуду и заставить его как-то работать.
Может быть, imagemagick — неправильный подход? Есть ли способ создать шаблон pdf с «слотами» x: y, которые уже имеют правильный размер для печати, а затем «вставить» изображения в эти слоты?
Комментарии:
1. Возможно, если бы вы предоставили 2-3 изображения с разными разрешениями и шаблон с ячейками, кто-нибудь мог бы помочь…
2. Я спрашивал, будет ли это лучшим подходом и как создать такой шаблон. В качестве альтернативы возиться с монтажом и преобразованием. Так что, очевидно, я не знаю, как это сделать. (По крайней мере, не в linux cmd. Я бы хотел избежать написания приложения для такой простой функции.)
Ответ №1:
Я делал что-то вроде этого pdflatex
. Вы пишете крошечный скрипт на Python / Ruby / bash / что угодно, чтобы обойти ваш каталог, найдя все файлы изображений, затем для каждого набора из N выводите исходный код LaTeX, размещающий N изображений на странице. Наконец, вставьте это в pdflatex
, и у вас будет хороший PDF-документ со всеми вашими встроенными изображениями. Это должно быть менее 10 строк кода плюс небольшой шаблон.
Это позволило бы вставлять изображения в их исходное разрешение и полагаться на средство рендеринга PDF для придания им размера на бумаге. Если некоторые из исходных изображений очень большие, это может быть немного расточительно. Я полагаю, вы могли бы использовать IM или эквивалент, чтобы сначала немного уменьшить размер больших файлов.
Редактировать: я сделал крошечный пример. Мой latex ужасен, я уверен, что вы могли бы написать что-то намного лучше:
#!/usr/bin/ruby
puts <<HEADER
\documentclass[a4paper]{article}
\usepackage{relsize}
\usepackage[pdftex]{graphicx,color}
\begin{document}
HEADER
ARGV.each_slice(4).to_a.each do |images|
puts "\begin{center}"
puts "\thispagestyle{empty}"
images.each {|filename| puts "\includegraphics[width=2in]{#{filename}}"}
puts "\end{center}"
puts "\newpage"
end
puts <<FOOTER
\end{document}
FOOTER
Запустите что-то вроде:
./layout.rb x/* > x.tex
Чтобы просканировать каталог x/
на наличие файлов jpg и сгенерировать файл latex с изображениями, расположенными вчетверо выше, затем:
pdflatex x.tex
evice x.pdf
Чтобы сгенерировать PDF и просмотреть его.
Комментарии:
1. Это хорошая идея. Я написал так много статей и тезисов в latex, но я просто не думал об этом. Это дало бы гораздо больше контроля и позволило бы также создавать макеты без сетки. Вместо того, чтобы создавать новый исходный код для каждой страницы, я мог бы создать шаблон с фиксированными именами файлов и просто запустить скрипт для копирования и переименования изображений.
2. Я отмечу это как ответ, потому что сейчас я использую latex в качестве решения. В качестве примечания: я не создаю текстовый код из скрипта. Я создаю шаблон .tex в sth, как Texmaker, а затем использую скрипт для переключения изображений на диске или в шаблоне. Таким образом, более сложные макеты становятся управляемыми, а шаблонами легче управлять / делиться. Возможно даже быстрое и грязное переключение изображений вручную. Для смешанного решения можно запустить файл .tex через sed и заменить, например, подписи для динамических частей.
Ответ №2:
Я нашел несколько приемлемый способ с монтажом
montage -geometry 0 0 ../*.jpg compress -resize 198x280 -extent 198x280 -tile 3x3 -gravity center -page a4 test.pdf
Начиная с размера точки a4 595×842, целевой размер для плиток можно рассчитать в процентах. В примере это 1/3 страницы и сетка 3×3.
-extent гарантирует, что изображение немного меньшего размера будет масштабировано до нужного размера. Таким образом, сетка остается нетронутой, а отпечатки легче вырезать.
Этого было бы достаточно для вырезания студенческих удостоверений личности и т. Д. Но это не так точно, как хотелось бы для хороших отпечатков. Я рассмотрю подход latex и посмотрю, как это работает.
Комментарии:
1. Очень полезное предложение, сработало как шарм! Спасибо