Obróć obrazy z terminala


34

Mam katalog z dużą ilością obrazów, ale są one w złej orientacji. Chcę obrócić obrazy, aby poprawić orientację (głównie ± 90 o ). Za pomocą przeglądarki zdjęć (shotwell photo) mogę obracać je indywidualnie, klikając przycisk obracania, ale to zbyt nudne.

Spojrzałem man shotwelli shotwell --help-allnic nie wyjaśnia, jak wywołać polecenie obrotu z wiersza polecenia.

Czy jest jakiś sposób na wywołanie polecenia obrotu shotwell (lub innej przeglądarki) z terminala? Lub wszelkie inne metody obracania obrazów są również mile widziane.


1
askubuntu.com/a/432662/15811, jeśli chcesz od nautilusa. Ale poleceniem terminalu jest „przekonwertować” z „
imagemagick

1
Jeśli chcesz rotacji bezstratnej, a pliki są w formacie JPEG, spójrz na jpegtran ; imagemagick wykona (szczerze mówiąc) stratną rotację .
Rmano

Odpowiedzi:


39

Jeśli szukasz czystej implementacji bash, convertpolecenie ImageMagick jest tym, czego szukasz:

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

Powyższe pozostawi nienaruszone istniejące pliki i skopiuje nowo obrócone, aby /tmpmożna je było przenieść lub skopiować gdzie indziej, a nawet zastąpić istniejące po konwersji i po weryfikacji .

(i będzie działać na wszystkich najnowszych wydaniach Ubuntu jako standardowego oprogramowania)


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

Spowoduje to skopiowanie, obrócenie i zmiana nazw plików.

Jeśli chcesz jeszcze pozostawić oryginalne pliki nietknięte, ta metoda może działać dobrze dla Ciebie ...

Pamiętaj, że wielkość liter ma znaczenie: jeśli twoje pliki mają nazwy * .jpg, zamień odpowiednio na małe (lub * .png ...).


4

Jeśli chcesz zastąpić w miejscu, mogrifyz ImageMagick Suite wydaje się najłatwiejszym sposobem na osiągnięcie tego:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

UWAGA : To nie jest bezstratna metoda rotacji plików JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranosiąga to (niesprawdzone):

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

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

Działa idealnie
Paul Jones

Mogrify jest dość szwajcarskim nożem, jeśli chodzi o prostą, szybką i szybką edycję zdjęć
EA304GT

najlepsza odpowiedź, dlaczego nie chcesz tego zrobić na miejscu?
mLstudent33

1
@ mLstudent33: Dobre pytanie. Wygląda na mogrifyto, że pliki JPEG nie są bezstratne, ale tak jpegtranjest.
krlmlr

3

Oto jak to robię:

  1. Zainstaluj gThumb

    sudo apt-get install gthumb
  2. Otwórz nautilus i przejdź do katalogu zdjęć. Kliknij jeden z nich prawym przyciskiem myszy i wybierz Open with -> gthumb.

  3. W viewmenu wybierz Browserlub naciśnij Escklawisz. Otworzy się przeglądarka katalogów pokazująca wszystkie twoje obrazy.

    wprowadź opis zdjęcia tutaj

  4. Naciśnij Ctrli wybierz obrazy, które chcesz obrócić lub zaznacz je wszystkie za pomocą Ctrl+ A.

  5. Na pasku narzędzi wybierz, Toolsa następnie Rotate Rightlub w Rotate Leftzależności od preferencji.

    wprowadź opis zdjęcia tutaj


0

Dobrym rozwiązaniem jest utworzenie zestawu kopii zapasowych (np. Z prefiksem backup-), obracanie oryginalnych plików, tworząc zestaw nowych plików (z prefiksem np. rotated-), Co daje zestaw

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...i tak dalej

W mv/ cpnarzędzia [bash masek] można dodać tylko prefiksy, to bałagan, aby je zabrać (by używać interpretacji parametrów, ewww ...)

renameNarzędzie pozwala na użycie s/before/after/składni podstawiania (od sednarzędzia) w celu zamiany tego przedrostka ochronnej i nadpisanie oryginalnych plików, dzięki czemu cały proces dla danego zestawu obrazów img-{1..n}.png byłoby:

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

Uwaga:

  • możesz użyć cpzamiast mv, ale są tam 2 kopie oryginału (wadą jest łączenie prefiksów, „ rotated-backup-...”)
  • obrót jest zgodny z ruchem wskazówek zegara ( -rotate 270pozwala uzyskać kąt 90 ° w kierunku przeciwnym do ruchu wskazówek zegara)
  • aby śledzić postęp, dodaj echo "Rotating ${imgf#backup-} ... ";po convertpołączeniach (przed done)
  • w celu uzyskania bardziej zwartej formy (np. zestawu plików numerowanych), użyj echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";zamiast tego rozszerzenia parametrów

    (Nie można usunąć prefiksu i sufiksu w tym samym rozszerzeniu bash param, dlatego używaj cut)

Następnie po weryfikacji nie pomieszałeś, usuń zdjęcia, przenosząc je z powrotem do oryginału

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

0

Możesz skopiować / wkleić ten kod i zapisać go jako rotate.sh

#!/bin/bash -e

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

Po zapisaniu tego pliku uruchom go z terminala za pomocą ./rotate.sh folder_containing_images.


Sprawdź swój kod i podany link!
George Udosen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.