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

21

Çok sayıda resme sahip bir dizim var ancak yanlış yönde. Yönlendirmeyi düzeltmek için görüntüleri döndürmek istiyorum (çoğunlukla ± 90 o ). Görüntü (shotwell fotoğraf) görüntüleyiciyi kullanarak bunları tek tek döndürme düğmesini tıklayarak döndürebilirim ama bu çok sıkıcı.

man shotwell ve shotwell --help-all değerlerine baktım, ancak komut satırından döndürme komutunu nasıl çağıracağınızı açıklayan hiçbir şey yok.

Terminale (veya başka bir görüntüleyicinin) döndürme komutunu terminalden çağırabilirmiyim? Veya görüntüleri döndürmek için başka yöntemler de kabul edilir.

    
sordu Prakash Gautam 02.03.2015 09:20

5 cevap

22

Saf bir bash uygulaması arıyorsanız, ImageMagick'in convert komutu aradığınız şeydir:

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

Yukarıdaki dosyalar mevcut dosyaları boş bırakacak ve yenilerini /tmp 'ye kopyalayacak, böylece bunları taşıyabildiğiniz / kopyalayabileceğiniz ve hatta dönüşümden sonra mevcut olanları değiştirebileceğiniz.

(ve standart yazılım olarak Ubuntu'nun tüm son sürümlerinde çalışacaktır)

    
verilen cevap Fabby 06.03.2015 16:52
20
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Bu işlem, rotasyon - ve dosyalarınızı yeniden adlandırır.

Henüz orijinal dosyaları el değmeden bırakmak isterseniz, bu yöntem sizin için iyi olabilir ...

Bunun büyük / küçük harfe duyarlı olduğunu unutmayın: dosya adınız * .jpg ile küçük harfle (veya * .png ...) değiştirin.

    
verilen cevap nutty about natty 13.08.2015 14:56
4

İşte nasıl yapacağım:

  1. gThumb'u yükle

    sudo apt-get install gthumb
    
  2. Nautilus'u açın ve görüntü dizininize gidin. Bire sağ tıklayın ve Open with -> gthumb öğesini seçin.

  3. view menüsünün altında Browser değerini seçin veya Esc tuşuna basın. Bu, tüm resimlerinizi gösteren dizin tarayıcısını açacaktır.

  4. Ctrl tuşlarına basın ve döndürmek istediğiniz görüntüleri seçin ya da tümünü Ctrl + A ile seçin.

  5. Araç çubuğunda, tercihinize göre Tools ve sonra Rotate Right veya Rotate Left öğesini seçin.

verilen cevap Parto 02.03.2015 11:55
0

Güzel bir çözüm, bir dizi yedeklemeyi (örneğin, backup- öneki) yapmak, bir dizi yeni dosya üreten orijinal dosyaları döndürmek (öneklenen ör. rotated- ), size bir

kümesi kazandırmaktır.
  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ... vb.

mv / cp araçları [bash globbing] yalnızca önekler ekleyebilir, onları uzaklaştırmak karışıklık yaratır (parametre genişletmeyi kullanır, ewww ...)

rename aracı, s/before/after/ substitution sözdizimini ( sed aracından), bu koruma ön ekini değiştirmek ve orijinal dosyaların üzerine yazmak için kullanmanıza olanak tanır, böylece belirli bir resim grubu için toplam işleminiz img- < strong> {1..n} .png şöyle olurdu:

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:

  • cp yerine mv kullanabilirsiniz, ancak orjinalinin 2 kopyası var (aşağı doğru öneklerin birleşimini elde edersiniz, " rotated-backup- ...")
  • dönüş saat yönünde ( -rotate 270 , saat yönünün tersine 90 ° alır)
  • ilerlemeyi izlemek için echo "Rotating ${imgf#backup-} ... "; çağrısından sonra convert ekleyin ( done önce)
  • daha kompakt bir form için (örneğin bir dizi numaralandırılmış dosya), bunun yerine echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; gibi bir parametre genişlemesi kullanın

    (Aynı bash param genişlemesinde önek ve sonek kaldıramazsınız, dolayısıyla cut kullanın)

Ardından doğrulama işleminden sonra, onları orijinaline geri taşıyarak resimleri silin

rename 's/^rotated-//;' rotated-*
rm backup-img-*
    
verilen cevap Louis Maddox 09.09.2016 22:39
0

Bu kodu kopyalayabilir / yapıştırabilir ve rotate.sh

olarak kaydedebilirsiniz.
#!/bin/bash -e

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

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

    
verilen cevap vin 31.03.2017 21:13

Etiketlerdeki diğer soruları oku