ArXen42
@ArXen42

Как заставить ImageMagick правильно воспринимать порядок файлов?

Здравствуйте. Есть .png файлы, нужно преобразовать их в pdf со сжатием. Делаю так:
convert -quality 75 *.png result.jpg && convert *.jpg result.pdf && rm *.jpg

Но вот проблема. PNG файлы упорядочены по имени (в алфавитном порядке). А вот результирующие JPG уже не до конца, идет
result-0, result-1 ... result-9, result-10>
Проблема в том, что у IM примитивный механизм сортировки по имени - цифры не переводятся в числа, в результате result-10.jpg в pdf войдет вторым, а не 11-м, как ему полагается. Что делать (кроме костыля в виде переименовывания руками)?

P.S. напрямую из .png в 2 раза больше файл получается, поэтому делаю промежуточное сжатие в .jpg. Может есть способы получше?
  • Вопрос задан
  • 755 просмотров
Пригласить эксперта
Ответы на вопрос 5
dimonchik2013
@dimonchik2013
non progredi est regredi
wincmd.ru/multirename.php это ускорение костыля

www.imagemagick.org/Usage/files а это правила:

используйте wildcard не "*", а ? - один символ
т.е. вначале шуруйте все с одним, потом с двумя и т.д.

но надежнее - переименовать
Ответ написан
ArXen42
@ArXen42 Автор вопроса
#!/bin/bash
mkdir converted

for file in *.png;
do
	convert -quality 70 $file 'converted/'result.jpg
	mv 'converted/'result.jpg 'converted/'$file'_result'.jpg
	echo "Converted..."
done

echo "Done"


Спасибо неизвестному автору за ответ. В теории это должно обрабатываться IM в том же порядке, что и исходные файлы.
Ответ написан
Ога. Вы там ман почитайте. Что можно выкинуть из пнг и в каком "качестве" получить вывод.
Но мой ответ на вопрос простой: используйте xargs.
Ну или банально делаем, к примеру, ls *.png | convert ...

Но лучше xargs в данном случае нет ничего.
Ответ написан
Комментировать
convert `ls *.jpg | sort -n` result.pdf
Ответ написан
Комментировать
@wwwtaras
пример input_0.png input_1.png input_2.png ...input_10.png
convert input_%01d.png[0-10] result_%01d.jpg
результат result_0.png result_1.png result_2.png ...result_10.png
или если нужны только избраные файлы
convert  input_%01d.png[1,2,5,9-10]   result_%01d.jpg


но лучше
convert input_%01d.png[0-10] result_%02d.jpg
тогда результат result_00.png result_01.png result_02.png ...result_10.png что при работе с файлами намного удобней
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы