#imagemagick #imagemagick-convert
#imagemagick #imagemagick-конвертировать
Вопрос:
У меня есть 100 изображений с именами img0.jpg в img99.jpg необходимо преобразовать в файл pdf. проблема в
convert img*.jpg out.pdf
добавляет страницы в порядке 1,11,2,22 и т.д. как определяется порядок в imagemagick?
Комментарии:
1. Доступ к изображениям осуществляется в алфавитном порядке из вашего каталога. Вам нужно переименовать ваши изображения с начальными нулями, img01, img02 … img99 для того, чтобы обработать в этом порядке.
2. Порядок «определен» в imagemagick как порядок, указанный в командной строке. Ваш реальный вопрос должен быть: как расширяется «img *.jpg»? Какой порядок использует оболочка для файлов, которые соответствуют шаблону. (Ответ: оболочка включает соответствующие имена файлов в порядке словаря, в соответствии с вашим языком.)
Ответ №1:
Либо пронумеруйте ваши страницы номерами с заполнением нулями, подобными этому, чтобы ImageMagick приводил их в порядок:
img000.jpg
img001.jpg
img002.jpg
...
img098.jpg
Тогда ваша исходная команда должна сработать.
Или bash
перечислите файлы по порядку и передайте имена в ImageMagick следующим образом:
magick img{0..99}.jpg result.pdf
Или:
for file in img{0..99}.jpg; do echo $file; done | magick @- result.pdf
Или переименуйте ваши файлы, как в первом примере выше, но с использованием Perl rename
:
rename --dry-run 's/D//g; $_=sprintf("f-d.jpg",$_)' f*jpg
Пример вывода
'f0.jpg' would be renamed to 'f-00000.jpg'
'f1.jpg' would be renamed to 'f-00001.jpg'
'f10.jpg' would be renamed to 'f-00010.jpg'
'f11.jpg' would be renamed to 'f-00011.jpg'
'f12.jpg' would be renamed to 'f-00012.jpg'
Возможно, у вас есть ls -v
в наличии, и в этом случае вы можете попробовать:
magick $(ls -v img*jpg) result.pdf