Как повернуть набор картинок из командной строки?

17

У меня есть большой набор изображений JPEG с одинаковым разрешением. Это займет слишком много времени, чтобы открыть каждый из них внутри графического интерфейса imagemagic или gimp.

Как мне добиться, чтобы каждое изображение поворачивалось и сохранялось под одним и тем же именем файла?

sharkant
источник
3
Смотрите здесь . Однако помните, что перекодирование JPEG обычно с потерями.
Сато Кацура

Ответы:

22

Вы можете использовать convertкоманду:

 convert input.jpg -rotate -degrees out.jpg

например:

convert input.jpg -rotate -180 out.jpg

Сохраните его под тем же именем:

convert file.jpg -rotate -180 file.jpg

Повернуть все файлы:

for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done

редактировать

Вы можете использовать mogrifyинструменты командной строки (лучший инструмент), рекомендованные @ don-crissti

mogrify -rotate 90 *.jpg
GAD3R
источник
1
спасибо, как я могу сказать команде, что имя файла слева от -rotate -180 должно быть таким же, как и справа от него, если файлов много?
sharkant
Поворот файла на 180 градусов всегда даст один и тот же результат, независимо от того, повернете ли вы его влево или вправо.
djsmiley2k в темноте
@ GAD3R 360 градусов приведет к тому же изображению впоследствии. Поворачивая изображение влево или вправо на 180 градусов, вы получаете одинаковое изображение (но вверх ногами).
djsmiley2k в темноте
2
$CAPITAL_NAMESследует оставить переменным среды; для этих локальных переменных в скриптах или командах оболочки используйте$normal_lowercase
cat
2
convertперекодирует JPEG и, следовательно, с потерями. Лучше использоватьjpegtran
imz - Иван
16

Для изображений JPEG и вращений под прямым углом используйте jpegtranили exiftran, поскольку они могут вращать изображения без потерь.

for f in *.jpg ; do 
    jpegtran -rotate 180 "$f" > "${f%.jpg}-rotated.jpg"
done

Или повернуть на месте:

for f in *.jpg ; do
    jpegtran -rotate 180 -outfile "$f" "$f"
done

exiftranтакже имеет -aфлаг для автоматического поворота изображения в зависимости от того, что говорит тег ориентации EXIF.

ilkkachu
источник
Для вращения против часовой стрелки (влево) с jpegtran, используйте -rotate 270и с exiftran используйте -2флаг в соответствии с руководством.
Тимо