Конвертируйте (сжимайте) изображения JPEG, используя mogrify, сохраняя исходные файлы в том же каталоге

498
vladimir pavloski

Я пытаюсь преобразовать (сжать) кучу изображений JPEG с помощью команды imagemagick mogrify, сохраняя исходный файл в той же директории. Я набираю в окне терминала: mogrify -quality 25% * .JPEG con% 002d.JPEG, затем получаю ошибку: mogrify: невозможно открыть изображение `con% 002d.JPEG ': такого файла или каталога @ error нет /blob.c/OpenBlob/2712. Как я могу решить эту ошибку? Я запустил: определить -бербос * | grep Формат и результат для всех файлов: Формат: JPEG (формат JFIF Объединенной группы экспертов по фотографии) exif: уменьшенное изображение: JPEGInterchangeFormat: 10718 exif: уменьшенное изображение: JPEGInterchangeFormatLength: 8223

У меня система Xubuntu 16.04, спасибо за помощь, Влади.

0
`mogrify` не имеет опции выходного файла: он всегда заменяет исходные файлы, а` con% 002d.JPEG` обрабатывается как просто другой входной файл (который не существует) после списка `* .JPEG` , AFH 6 лет назад 1
Какое имя выходного вы ищете? Последовательная нумерация? chew socks 6 лет назад 0
@chewsocks Я где-то читал (я не помню, где), что я могу сжать файл JPEG с заданным именем выходного файла, который не заменит исходный файл. Имя вывода может быть последовательным числом или что-то вроде con-001.JPEG, con-002.JPEG, con-003.JPEG, .... vladimir pavloski 6 лет назад 0
Возможно, вы думали о `ffmpeg`, который поддерживает последовательное именование выходных данных. chew socks 6 лет назад 0
@chewsocks Нет, я не ошибаюсь, это по команде imagemagick mogrify. vladimir pavloski 6 лет назад 0

2 ответа на вопрос

1
chew socks

Для man-страницы mogrify не требуется опция вывода, она просто перезаписывает входной файл, если формат не изменен (то же имя используется вплоть до расширения файла).

Попробуйте это, используя convertвместо этого.

#!/bin/bash n=1 for i in *.JPEG; do  convert "$i" -format jpg -quality '25%' $(printf con-%03d.JPEG $n) n=$((n+1)) done 

JPEG против JPG

Я дважды замаскировал одно и то же изображение

$ mogrify -format JPEG b.jpg $ mogrify -format jpg b.jpg 

затем

$ diff -u <(identify -verbose b.jpg ) <(identify -verbose b.JPEG) --- /dev/fd/63 2018-09-29 14:42:27.506462707 -0400 +++ /dev/fd/62 2018-09-29 14:42:27.510462929 -0400 @@ -1 +1 @@ -Image: b.jpg +Image: b.JPEG @@ -71,2 +71,2 @@ - date:create: 2018-09-29T14:37:11-04:00 - date:modify: 2018-09-29T14:37:11-04:00 + date:create: 2018-09-29T14:37:03-04:00 + date:modify: 2018-09-29T14:37:03-04:00 @@ -77 +77 @@ - filename: b.jpg + filename: b.JPEG 
ХОРОШО!! Это сделано работа. Благодарю. Могу я спросить, в чем разница между форматом JPEG и jpg fomat? Сценарий, приведенный выше, преобразуется в «jpg», затем вывод нового файла сохраняется как «.JPEG». Что за хак? Спасибо vladimir pavloski 6 лет назад 0
@vladimirpavloski Хороший вопрос ... привычка = P. Я избегаю заглавных букв в своих именах, поэтому я всегда думаю о формате как "jpg". `convert` не требует расширения файлов (вы можете сохранить JPEG как .txt), и, поскольку я был конкретен, я увидел, что вам понравился" JPEG ". chew socks 6 лет назад 0
Это уточнить мои вопросы. Благодарю. vladimir pavloski 6 лет назад 0
0
Janghou

использование -write

mogrify -set filename:name '%t_q%Q' -quality 30 -write '%[filename:name].jpg' *.jpg 

Приведенная выше команда запишет преобразованное изображение в новое имя: преобразование name.jpg в name_q30.jpg, name1.jpg в name1_q30.jpg . Храните ваши старые файлы в безопасности.

Другие параметры процентных метаданных см. В документации.