Кто-нибудь знает хороший способ пакетного преобразования группы PNG в JPG в Linux? (Я использую Ubuntu).
Двоичный файл png2jpg, который я мог бы просто вставить в сценарий оболочки, был бы идеальным.
linux
shell-script
jpeg
png
nedned
источник
источник
mogrify -format jpg -background black -flatten *.png
mogrify -format jpeg img.png
меня есть 2 файла иfile img.*
сообщается один png, оригинальный нетронутый и новый jpeg. Такmogrify
что не перезаписывать оригинальные файлы в этом случае.mogrify
документации: « Этот инструмент похож на заconvert
исключением того, что исходный файл изображения будет перезаписан (если вы не измените суффикс файла с -format опция) с любыми изменениями вы запрашиваете. »У меня есть еще пара решений.
Самое простое решение похоже на большинство уже опубликованных. Простой удар для цикла.
По какой-то причине я стараюсь избегать циклов в bash, так что здесь есть более юниксный подход xargs, использующий bash для искажения имен.
Тот, который я использую. Он использует GNU Parallel для одновременного запуска нескольких заданий, что повышает производительность. Он устанавливается по умолчанию во многих системах и почти наверняка находится в вашем репозитории (это хорошая программа, чтобы иметь вокруг).
Количество заданий по умолчанию равно числу процессов, которые у вас есть. Я нашел лучшее использование процессора, используя 3 задания в моей двухъядерной системе.
И если вам нужна статистика (ETA, выполненные задания, среднее время работы ...)
Существует также альтернативный синтаксис, если вы используете GNU Parallel.
И похожий синтаксис для некоторых других версий (включая Debian).
источник
done
конец цикла for. Кроме того, для параллельной работы вы можете избежать использования этогоls
и pipe с такой конструкцией, как:parallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png
(см. Здесь )ls
метода для себя, потому что он имеет больше смысла для меня.--
а не:::
) - и даже тогда, к сожалению, ей не хватает некоторых функций параллели GNU.Команда,
convert
найденная во многих дистрибутивах Linux, устанавливается как часть пакета ImageMagick. Вот код bash для запускаconvert
всех файлов PNG в каталоге и избежания этой проблемы двойного расширения:источник
for f in *.png; do convert "$f" "${f/%png/jpg}"; done
ТЛ; др
Для тех, кто просто хочет самые простые команды:
Конвертируйте и сохраняйте оригинальные файлы:
Конвертировать и удалить оригинальные файлы:
Пакетное преобразование объяснил
Вроде бы поздно на вечеринку, но просто чтобы прояснить всю путаницу для кого-то, кому может быть не очень комфортно с кли, вот супер тупая ссылка и объяснение.
Пример каталога
Простой Конвертировать
Сохраняет все оригинальные файлы PNG, а также создает файлы JPG.
Результат
объяснение
-format
опции. (С сайта :This tool is similar to convert except that the original image file is overwritten (unless you change the file suffix with the -format option)
)- format
Параметр указывает , что будет изменение формата, и следующий аргумент должен быть типа (в данном случае, JPG).*.png
это входные файлы (все файлы, заканчивающиеся на .png).Конвертировать и удалить
Конвертирует все png файлы в jpg, удаляет оригинал.
Результат
объяснение
&&
логический оператор. Короче говоря:0
означает отсутствие ошибок.&&
выполняется оценка короткого замыкания , правая часть будет выполняться только в случае отсутствия ошибок . Это полезно, потому что вы можете не захотеть удалять все исходные файлы, если произошла ошибка при их преобразовании.rm
удаляет файлы.Модные вещи
Теперь вот некоторые лакомства для людей , которые являются удобными с кли.
Если вы хотите выводить данные во время конвертации файлов:
Конвертируйте все файлы png во все подкаталоги и дайте вывод для каждого:
Конвертируйте все файлы png во всех подкаталогах, поместите все получившиеся файлы jpgs в
all
каталог, пронумеруйте их, удалите исходные файлы png и отобразите выходные данные для каждого файла в том виде, как это происходит:источник
while read
части (замените или удалите все вместе) ...Действительное «
png2jpg
команда» вы ищете в действительности расщепляются на две команды называютсяpngtopnm
иcjpeg
, и они являются частьюnetpbm
иlibjpeg-progs
пакетов, соответственно.источник
источник
*.jpg
файлы рядом с исходными*.png
файлами, показывает, как уменьшить размер / качество файла и не ломается из-за каких-либо нечетных символов в каталоге или имени файла.мое быстрое решение
for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done
источник
for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done
. Это позволяет избежать ненужных полностьюls
,grep
иsed
звонков (иecho
, но IIRC это Баш и поэтому встроенный будет нет / очень мало влияет на производительность), и избавляется от двух труб и два подоболочек, и требует меньше печатать. Это даже немного более портативно, так как не все версииls
безопасны для анализа.Слишком много лет спустя, специально для этой цели есть утилита png2jpeg , которую я создал.
Адаптация кода с помощью @Marcin:
источник
Для пакетной обработки:
Вы получите имена файлов вроде image1.png.jpg.
Это будет работать в Bash, и, возможно, Bourne. Я не знаю о других оболочках, но единственное различие, вероятно, будет синтаксис цикла.
источник
Это то, что я использую для преобразования, когда файлы охватывают более одного каталога. Мой оригинальный был TGA в PNG
Идея в том, что
find
вам нужны файлы, удалите расширение и добавьте его обратноxargs
. Таким образом, для PNG на JPG вы должны изменить расширения и сделать еще одну дополнительную вещь для работы с альфа-каналами, а именно установить фон (в этом примере белый, но вы можете изменить его), а затем сгладить изображениеисточник