Imagemagick ile bir dizindeki tüm görüntüleri nasıl döndürürüm?


Yanıtlar:


20

Kodunuzla ilgili birkaç sorun var. Her şeyden önce, kötü bir fikir olan ls ayrıştırıyorsunuz . Değişkeni $fileişaret ettiğiniz gibi belirtmeniz gerekir ve ayrıca boşluklara zarar vermeyecek şekilde alıntı yapmanız gerekir. Bildiriyorsunuz numama asla kullanılmıyor. Daha güvenli bir yol:

find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
  convert "$file" -rotate 90 "$file"_rotated.JPG
done

Dosyalarınız yeni satır içeriyorsa bu sorun devam eder, ancak yolunuzda boşluk varsa en azından kesilmez.

Dosyaların hepsi aynı dizinde ise, globbing kullanılarak daha da basitleştirilebilir. Ayrıca oluşturmak için parametre genişleme kullanabilirsiniz foo_rotated.JPG1yerine foo.JPG_rotated.JPG:

for file in /tmp/p/DSC*.JPG; do
  convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done

2
Metodunuz oluşturulur original_filename.JPG_rotated.JPG". ekleme "${file%.JPG}"_rotated.JPG daha uygun olacaktır imho. Şerefe!
Valentin Bajrami

1
@ val0x00ff kesinlikle (ve bunu öneren cevabınızı onayladım). OP'nin daha göze çarpan hataları düzeltmek için yaptığı şeyi tekrarladım.
terdon

güzel! Komutunu biraz değiştirdim.
Valentin Bajrami

11

mogrify -rotate 90 *.jpg Tüm görüntüleri imagemagick ile döndürmek için daha iyi One-Liner

mogrify -rotate 90 /tmp/p/DSC*.JPG Tüm döndür infact olacaktır .JPGile başlangıç DSChalinde pdizine

Mogrify (imagemagick'in bir parçası) Convert, orijinal dosyayı http://www.imagemagick.org/script/mogrify.php olarak değiştirmesinden farklıdır.


11

PE (Parametre Genişletme) kullanarak basit bir yöntem

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done

1
Burada bashspesifik bir şey olmadığı, mükemmel standart POSIX sh sözdizimi olduğuna dikkat edilmelidir .
Stéphane Chazelas

6

Ayrıştırmayınls ve lsburada gerekli değildir. Ayrıca, boşluk içermeleri durumunda değişkenlerinizi belirtmelisiniz.

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done

boşluk ... veya sekmeler veya yeni satır veya yıldız işareti veya soru işareti veya köşeli ayraç ...
Stéphane Chazelas

6

Imagemagic bir çözüm değil,

sips -r 90 *.JPG

.JPG ile biten tüm görüntüleri 90 derece döndürür. İyi bir astar.


1
fwiw, bu orijinal görüntülerin üzerine yazar.
don_crissti

0

Dosyaya $file, yani

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 $file+'_rotated'.JPG
done

0

Bu kodu ubuntu'ya kopyalayıp yapıştırabilir ve "rotate.sh" olarak kaydedebilirsiniz.

#!/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 şunu kullanarak terminalden çalıştırın. ./rotate.sh folder_containing_images

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.