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

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

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

Есть ли способ, с помощью которого я могу вызвать команду rotate от shotwell (или любого другого зрителя) с терминала? Также приветствуются любые другие способы поворота изображений.

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

 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 …) соответственно.

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

  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 зависимости от ваших предпочтений.

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

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

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

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

Инструмент rename позволяет использовать синтаксис s/before/after/ substitution (из инструмента 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-* 

Вы можете скопировать / вставить этот код и сохранить его как 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 .