Terminalden görüntüleri döndür


34

Çok fazla görüntü içeren bir dizine sahibim, ancak yanlış yöndeler. Yönlendirmeyi düzeltmek için görüntüleri döndürmek istiyorum (çoğunlukla ± 90 o ). Resim (shotwell fotoğraf) görüntüleyiciyi kullanarak, döndürme düğmesini tıklatarak bunları tek tek döndürebilirim, ancak bu çok sıkıcı.

Ben baktım man shotwellve shotwell --help-allancak komut satırından döndürme komutu çağırmak açıklar şey yok.

Shotwell'in döndürme komutunu (veya başka herhangi bir izleyiciyi) terminalden çağırmamın bir yolu var mı? Veya görüntüleri döndürmek için başka herhangi bir yöntem de açığız.


1
Nautilus'tan istiyorsan askubuntu.com/a/432662/15811 . Fakat istediğiniz terminal komutu "imagemagick" den "
dönüşte

1
Kayıpsız bir rotasyon istiyorsanız ve dosyalar jpeg ise, jpegtran ; imagemagick (açıkçası küçük) kayıplı bir dönüş yapacak .
Rmano

Yanıtlar:


39

Saf bir bash uygulaması arıyorsanız, ImageMagick'in convertkomutu aradığın şey:

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

Yukarıdakiler mevcut dosyaları eksiksiz bırakacak ve yeni döndürülmüş dosyaları kopyalayacaktır, /tmpböylece onları başka bir yere taşıyabilir veya kopyalayabilir ya da dönüşümden sonra ve doğrulama sonrasında mevcut olanları değiştirebilirsiniz .

(ve standart bir yazılım olduğu için Ubuntu'nun tüm yeni sürümlerinde çalışacak)


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

Bu kopyala - dönecek ve dosyalarınızı yeniden adlandıracak.

Özgün dosyaları henüz dokunulmamış halde bırakmak istiyorsanız, bu yöntem sizin için işe yarayabilir ...

Bunun büyük / küçük harfe duyarlı olduğuna dikkat edin: dosyalarınız * .jpg olarak adlandırılmışsa, küçük harfle (veya * .png ...) uygun şekilde değiştirin.


4

Yerinde yerine yazmak istiyorsanız mogrify, ImageMagick paketinden bunu elde etmenin en kolay yolu gibi görünüyor:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : Bu, JPEG dosyaları için kayıpsız bir döndürme yöntemi değildir, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranBunu başarır (denenmemiş):

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

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

Mükemmel çalışıyor
Paul Jones

Mogrify basit, hızlı, toplu görüntü düzenleme söz konusu olduğunda oldukça bir İsviçre bıçağı
EA304GT

En iyi cevap, neden bunu yerinde yapmak istemezsin?
mLstudent33

1
@ mLstudent33: Güzel soru. mogrifyJPEG dosyaları için kayıpsız değil, öyle görünüyor jpegtran.
krlmlr

3

İşte nasıl yaparım:

  1. GThumb'u yükleyin

    sudo apt-get install gthumb
  2. Nautilus'u açın ve resim dizininize gidin. Birini sağ tıklayın ve seçin Open with -> gthumb.

  3. viewMenü altında seçin Browserveya tuşuna basın Esc. Bu, tüm resimlerinizi gösteren dizin tarayıcısını açar.

    görüntü tanımını buraya girin

  4. Basın Ctrlve döndürmek istediğiniz görüntüleri seçin veya hepsini Ctrl+ ile seçin A.

  5. Araç çubuğunda, seçmek Toolsve ardından Rotate Rightya Rotate Lefttercihinize bağlı.

    görüntü tanımını buraya girin


0

İyi bir çözüm, bir takım yedekler (örneğin ön ek backup-) yapmak, orijinal bir dosyayı bir dizi yeni dosya üreten (ön ek örneğin rotated-) döndürerek bir dizi veri seti oluşturmaktır.

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...ve bunun gibi

mv/ cpAraçları yalnızca önekleri ekleyebilir, 's dağınık onları götürmek için [bash globbing] (Bu parametre genişleme kullanmayı tercih, ewww ...)

renameAracı kullanmanıza olanak sağlar s/before/after/(den ikame sözdizimi sedkoruma öneki o takas için bir araç) ve resimlerden oluşan bir set verilen genel işlem, orijinal dosyaların üzerine img-{1..n}.png olacaktır:

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

Not:

  • Eğer kullanabilirsiniz cpziyade mv, ama sonra ortalıkta orijinal 2 kopya var (olumsuz önekleri concatenation olsun, " rotated-backup-...")
  • dönme saat yönündedir (saat yönünün tersine -rotate 27090 ° döndürür)
  • ilerlemeyi izlemek için aramalardan echo "Rotating ${imgf#backup-} ... ";sonra ekleyin convert(önce done)
  • daha kompakt bir form için (örneğin bir numaralı dosya kümesi), echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";bunun yerine bazı parametre genişlemelerini kullanın.

    (Aynı bash param genişletme dolayısıyla kullanımında önek ve sonekleri kaldıramazsınız cut)

Ardından karışmadığınızı doğruladıktan sonra, fotoğrafları orijinal haline getirerek silin.

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

0

Bu kodu kopyalayıp yapıştırabilir ve rotate.sh

#!/bin/bash -e

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

Bu dosyayı kaydettikten sonra, kullanarak terminalden çalıştırın ./rotate.sh folder_containing_images.


Lütfen kodunuzu ve verilen bağlantıyı kontrol edin!
George Udosen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.