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

Вот простой способ сделать это с помощью gawk, у которого есть встроенная переменная ARGIND , индекс в ARGV текущего обрабатываемого файла.

Мы разделяем каждую входную строку первого файла на - и используем первое поле для индексации в массив таблицу , в которой хранится вся строка. Для второго файла (и любых последующих файлов) мы используем всю строку в качестве индекса в таблице , чтобы получить желаемую строку.

BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}

Или однострочно:

awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2

Вот еще одна версия, которая будет работать с традиционным awk. Он определяет, является ли текущий файл первым файлом, сравнивая FNR , номер входной записи в текущем входном файле с NR , общим количеством входных записей, просмотренных на данный момент.

awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2
17
18.05.2017, 01:42
3 ответа

Вы можете использовать команду 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
52
27.01.2020, 19:46

Для изображений 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.

19
27.01.2020, 19:46

Обратите внимание, что два других ответа могут давать разные результаты в зависимости от ориентации EXIF  :кажется, что convertвращается относительно ориентации EXIF, а jpegtranпросто игнорирует ориентацию EXIF.

Это наблюдение привело меня к выводу, что на самом деле мне нужно отказаться от ориентации EXIF, поэтому я просто использовал exiftoolдля удаления данных EXIF ​​без дальнейшей потери данных (это также то, что делает jpegtran, когда не выбрана опция -rotate. дано, кажется ) :

exiftool -all= -o outfile.jpg infile.jpg

Я мог бы просто удалить ориентацию EXIF ​​с помощью

exiftool -Orientation= -o outfile.jpg infile.jpg

или изменить его с помощью

exiftool -n -Orientation=1 -o outfile.jpg infile.jpg

(для этого более позднего случая вам нужно будет прочитать FAQ , чтобы понять параметр -n, необходимый для exiftoolдля перевода значения -Orientation, и таблицу тегов EXIF ​​).

1
18.06.2020, 20:18

Теги

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