Поворот изображения с терминала

У меня есть каталог с большим количеством изображений, но они имеют неправильную ориентацию. Я хочу повернуть изображения для правильной ориентации (в основном ± 90o). С помощью средства просмотра изображений (снимок с фото) я могу поворачивать их по отдельности, нажимая кнопку поворота, но это слишком утомительно.

я смотрел на man shotwell а также shotwell --help-all но нет ничего, что объясняет, как вызвать команду rotate из командной строки.

Можно ли как-нибудь вызвать команду поворота Shotwell (или любого другого зрителя) из терминала? Или любые другие методы для поворота изображения тоже приветствуются.

9 ответов

Решение

Если вы ищете чистую реализацию bash, ImageMagick's convert Команда это то, что вы ищете:

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

Выше оставит существующие файлы нетронутыми и скопировать новые в /tmp так что вы можете переместить или скопировать их в другое место или даже заменить существующие после преобразования и после проверки.

(и он будет работать на всех последних выпусках Ubuntu как стандартного программного обеспечения)

for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Это скопирует,повернет и переименует ваши файлы.

Если вы хотите оставить исходные файлы без изменений, этот метод может вам подойти...

Обратите внимание, что это чувствительно к регистру: если ваши файлы называются *.jpg, замените их на строчные (или *.png ...) соответственно.

Если вы хотите перезаписать на месте, mogrify из набора ImageMagick, кажется, самый простой способ достичь этого:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

Вот как я это делаю:

  1. Установить gThumb

    sudo apt-get install gthumb
    
  2. Откройте nautilus и перейдите в каталог изображений. Щелкните правой кнопкой мыши по одному и выберите Open with -> gthumb,

  3. Под view выбор меню Browser или нажмите клавишу Esc. Откроется браузер каталога со всеми вашими изображениями.

    введите описание изображения здесь

  4. Нажмите Ctrl и выберите изображения, которые вы хотите повернуть, или выделите все из них с помощью Ctrl + A.

  5. На панели инструментов выберите Tools а потом Rotate Right или же Rotate Left в зависимости от ваших предпочтений.

    введите описание изображения здесь

Как насчет exiftran - преобразуйте изображения в формате JPEG с цифровой камеры

Я знаю, что это немного ограничивает (jpeg), но он автоматический (с использованием тега ориентации exif).

      for photo in *.jpg
  do exiftrans -ia $photo
done

Что касается Exiftran, это утилита командной строки для преобразования изображений в формате JPEG с цифровой камеры. Он может выполнять повороты без потерь, как jpegtran(1), но в отличие от jpegtran(1) он заботится о данных EXIF: он может автоматически поворачивать изображения, проверяя тег ориентации exif; он обновляет информацию exif, если это необходимо (размер изображения, ориентация); он также вращает миниатюру exif. Он может обрабатывать несколько изображений одновременно

Как отмечает krlmlr в своем ответе , jpegtran(устанавливается на Ubuntu с sudo apt install libjpeg-turbo-progs) доступен для вращения без потерь, но поскольку он выводится на стандартный вывод, команда для его использования будет выглядеть примерно так:

      $ for img in *.jpg; do jpegtran -rotate 90 -copy all $img > rotated-${img}; done

Эта команда возьмет каждый файл в текущем каталоге и создаст повернутую версию (90° по часовой стрелке) копию каждого файла с новым именем. rotated-image-name.jpg. Выключатель -copy allзаключается в том, чтобы скопировать все метаданные в новый файл.

Для получения дополнительной информации см. man jpegtran.

Дополнительная информация, учитывая, что исходный вопрос касался Шотвелла: согласно документации Шотвелла, повороты Шотвелла и другие правки фактически не будут редактировать файлы на диске:

Shotwell — неразрушающий фоторедактор. Он не изменяет ваши оригинальные фотографии. То есть, если вы обрежете фотографию или настроите ее цвета, файл фотографии на диске останется нетронутым. Shotwell сохраняет ваши правки в базе данных и при необходимости применяет их на лету. Это означает, что вы можете отменить любые изменения, внесенные в фотографию.

Вы можете скопировать / вставить этот код и сохранить его как rotate.sh

#!/bin/bash -e

CUR_DIR=$(pwd)
cd $1
for file in *.jpg
do
    convert $file -rotate 90 $file
done
cd $CUR_DIR

После сохранения этого файла запустите его из терминала, используя ./rotate.sh folder_containing_images,

Хорошим решением является создание набора резервных копий (например, с префиксом backup-), поверните исходные файлы, создав набор новых файлов (с префиксом, например, rotated-), давая вам набор

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...и так далее

mv / cp Утилиты [bash globbing] могут только добавлять префиксы, грязно их убирать (будет использоваться расширение параметров, например...)

rename инструмент позволяет использовать s/before/after/ синтаксис замещения (из sed инструмент), чтобы заменить этот префикс защиты и перезаписать исходные файлы, чтобы ваш общий процесс для данного набора картинок img- {1..n} .png было бы:

for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done

Замечания:

  • вы могли бы использовать cp скорее, чем mv, но там лежат 2 копии оригинала (недостатком является то, что вы получаете объединение префиксов " rotated-backup-... ")
  • вращение по часовой стрелке (-rotate 270 получает вас на 90° против часовой стрелки)
  • чтобы отслеживать прогресс, добавьте echo "Rotating ${imgf#backup-} ... "; после convert звонки (до done)
  • для более компактной формы (например, набора пронумерованных файлов) используйте расширение некоторых параметров, например echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; вместо

    (Вы не можете удалить префикс и суффикс в одном расширении bash param, поэтому используйте cut )

Затем после проверки вы не перепутали, удалите картинки, переместив их обратно в оригинал

rename 's/^rotated-//;' rotated-*
rm backup-img-*

Если у вас естьffmpegи если ваши изображения пронумерованы последовательно, начиная с нуля с 6 цифр, вы можете вращать их с помощью

      ffmpeg -pattern_type glob -i '*.jpg' -start_number 0 -vf "transpose=1" -qscale:v 5 %06d.jpg 

цифра послеqscale:vконтролирует качество вывода, чем меньше, тем лучше.

Другие вопросы по тегам