Putar gambar dari terminal

34

Saya memiliki direktori dengan banyak gambar tetapi mereka berada dalam orientasi yang salah. Saya ingin memutar gambar ke arah yang benar (sebagian besar ± 90 o ). Menggunakan penampil gambar (foto shotwell) saya dapat memutarnya satu per satu dengan mengklik tombol putar tetapi itu terlalu membosankan.

Saya melihat man shotwelldan shotwell --help-alltetapi tidak ada yang menjelaskan cara menjalankan perintah rotate dari baris perintah.

Apakah ada cara saya dapat menjalankan perintah rotate dari shotwell (atau penampil lain) dari terminal? Atau metode lain untuk memutar gambar juga diterima.

pranphy
sumber
1
askubuntu.com/a/432662/15811 jika Anda menginginkannya dari nautilus. Tetapi perintah terminal yang Anda inginkan adalah "convert" from "imagemagick"
Rinzwind
1
Jika Anda menginginkan rotasi tanpa kehilangan dan file-file tersebut adalah jpeg, lihatlah jpegtran ; imagemagick akan melakukan rotasi lossy (terus terang kecil) .
Rmano

Jawaban:

39

Jika Anda mencari implementasi bash murni, convertperintah ImageMagick adalah yang Anda cari:

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

Di atas akan membiarkan file yang ada tetap utuh dan menyalin yang baru diputar /tmpsehingga Anda dapat memindahkan atau menyalinnya di tempat lain atau bahkan mengganti yang sudah ada setelah konversi dan setelah verifikasi .

(dan ini akan bekerja pada semua rilis Ubuntu terbaru karena merupakan perangkat lunak standar)

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

Ini akan menyalin- memutar -dan-mengganti nama file Anda.

Jika Anda ingin membiarkan file asli belum tersentuh, metode ini mungkin berfungsi dengan baik untuk Anda ...

Perhatikan bahwa ini peka huruf besar-kecil: jika file Anda diberi nama * .jpg ganti dengan huruf kecil (atau * .png ...) yang sesuai.

gila tentang natty
sumber
4

Jika Anda ingin menimpa di tempat, mogrifydari suite ImageMagick tampaknya menjadi cara termudah untuk mencapai ini:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : Ini bukan metode rotasi tanpa kehilangan untuk file JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranmencapai ini (belum diuji):

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

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90
krlmlr
sumber
Berfungsi sempurna
Paul Jones
Mogrify adalah pisau Swiss dalam hal pengeditan gambar yang sederhana, cepat, dan banyak
EA304GT
jawaban terbaik, mengapa Anda tidak ingin melakukan ini di tempat?
mLstudent33
1
@ mLstudent33: Pertanyaan bagus. Tampaknya mogrifytidak lossless untuk file JPEG, tetapi jpegtran.
krlmlr
3

Begini cara saya melakukannya:

  1. Instal gThumb

    sudo apt-get install gthumb
  2. Buka nautilus dan buka direktori gambar Anda. Klik kanan pada salah satu dan pilih Open with -> gthumb.

  3. Di bawah viewmenu pilih Browseratau tekan Esctombol. Ini akan membuka browser direktori yang menunjukkan semua gambar Anda.

    masukkan deskripsi gambar di sini

  4. Tekan Ctrldan pilih gambar yang ingin Anda putar atau pilih semuanya melalui Ctrl+ A.

  5. Pada bilah alat, pilih Toolsdan kemudian Rotate Rightatau Rotate Lefttergantung pada preferensi Anda.

    masukkan deskripsi gambar di sini

Parto
sumber
0

Solusi yang bagus adalah membuat satu set cadangan (mis. Diawali backup-), memutar file asli menghasilkan satu set file baru (misalnya awalan rotated-), memberi Anda satu set

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...dan seterusnya

Itu mv / cptools [bash globbing] hanya dapat menambahkan awalan, itu berantakan untuk mengambilnya (itu akan menggunakan ekspansi parameter, ewww ...)

The renamealat memungkinkan Anda untuk menggunakan s/before/after/sintaks substitusi (dari sedalat) untuk swap awalan safeguard dan menimpa file asli, sehingga proses Anda secara keseluruhan untuk satu set gambar img-{1..n}.png akan menjadi:

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

catatan:

  • Anda bisa menggunakannya cp daripada mv, tetapi kemudian ada 2 salinan asli yang tergeletak di sekitar (sisi negatifnya adalah Anda mendapatkan gabungan awalan, " rotated-backup-...")
  • rotasi searah jarum jam (-rotate 270 membuat Anda 90 ° berlawanan arah jarum jam)
  • untuk melacak kemajuan, tambahkan echo "Rotating ${imgf#backup-} ... ";setelahconvert panggilan (sebelum done)
  • untuk bentuk yang lebih ringkas (mis. satu set file bernomor), gunakan beberapa ekspansi parameter seperti echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; sebagai gantinya

    (Anda tidak dapat menghapus awalan dan sufiks dalam ekspansi bash param yang sama maka gunakan cut)

Kemudian setelah verifikasi Anda tidak mengacaukan, hapus gambar dengan memindahkannya kembali ke aslinya

rename 's/^rotated-//;' rotated-*
rm backup-img-*
Louis Maddox
sumber
0

Anda dapat menyalin / menempelkan kode ini, dan menyimpannya sebagai rotate.sh

#!/bin/bash -e

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

Setelah menyimpan file ini, jalankan dari terminal menggunakan ./rotate.sh folder_containing_images.

vin
sumber
Silakan periksa kode Anda dan tautan yang diberikan!
George Udosen