Обертати зображення з терміналу


34

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

Я подивився на man shotwellі , shotwell --help-allале немає нічого , що пояснює , як викликати команду повороту з командного рядка.

Чи я можу викликати команду обертання прострілу (або будь-якого іншого переглядача) з терміналу? Або будь-які інші методи обертання зображень також вітаються.


1
askubuntu.com/a/432662/15811, якщо потрібно від nautilus. Але потрібна термінальна команда - "перетворити" з "imagemagick"
Rinzwind

1
Якщо ви хочете обертання без втрат, а файли jpeg, подивіться на jpegtran ; imagemagick зробить (відверто малу) обертання втрат .
Рмано

Відповіді:


39

Якщо ви шукаєте чисту реалізацію bash, convertкоманда ImageMagick - це те, що ви шукаєте:

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

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

(і він працюватиме на всіх останніх випусках Ubuntu, як це стандартне програмне забезпечення)


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

CAVEAT : Це не спосіб повороту файлів 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

Працює чудово
Пол Джонс

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залежно від ваших уподобань.

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


0

Приємним рішенням є створення набору резервних копій (наприклад, префіксованих backup-), обертання оригінальних файлів, що створюють набір нових файлів (префіксованих напр. rotated-), Надаючи набір

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

Інструменти mv/ cptools [bash globbing] можуть додавати лише префікси, їх забирати безладно (це використовує розширення параметрів, ewww ...)

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, але тоді є дві копії оригіналу, що лежить навколо (недоліком є ​​отримання конкатенації префіксів, " 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-*

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.


Перевірте свій код та вказане посилання!
Джордж Удосен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.