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

34

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

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

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

pranphy
источник
1
askubuntu.com/a/432662/15811, если вы хотите от nautilus. Но вам нужна терминальная команда "convert" из "
imagemagick
1
Если вы хотите вращение без потерь и файлы в формате jpeg, взгляните на jpegtran ; imagemagick сделает (откровенно маленький) поворот с потерями .
Rmano

Ответы:

39

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

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

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

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

Fabby
источник
28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Это будет копировать- вращать и переименовывать ваши файлы.

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

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

сумасшедший о натти
источник
4

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

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

ПРЕДУПРЕЖДЕНИЕ . Это не метод вращения без потерь для файлов JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranдостигает этого (не проверено):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90
krlmlr
источник
Работает отлично
Пол Джонс
Mogrify - настоящий швейцарский нож, когда дело доходит до простого, быстрого пакетного редактирования изображений
EA304GT
лучший ответ, почему бы вам не сделать это на месте?
mLstudent33
1
@ mLstudent33: Хороший вопрос. Похоже, что mogrifyне без потерь для файлов JPEG, но jpegtranесть.
krlmlr
3

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

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

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

Parto
источник
0

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

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

В mv/ cptools [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 27090 ° против часовой стрелки)
  • для отслеживания прогресса, добавить 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-*
Луи Мэддокс
источник
0

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

Vin
источник
Пожалуйста, проверьте ваш код и приведенную ссылку!
Джордж Удосен