ImageMagick преобразует не по порядку

#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