Tôi muốn xoay tất cả các hình ảnh trong một thư mục phù hợp với một mẫu.
Cho đến nay tôi có:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
Nhưng điều đó không cho đầu ra?
Tôi muốn xoay tất cả các hình ảnh trong một thư mục phù hợp với một mẫu.
Cho đến nay tôi có:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
Nhưng điều đó không cho đầu ra?
Câu trả lời:
Có khá nhiều vấn đề với mã của bạn. Trước hết, bạn đang phân tích ls đó là một ý tưởng tồi . Bạn cũng cần tham khảo biến như $file
bạn đã chỉ ra và bạn cũng nên trích dẫn nó để nó không bị vỡ trên các khoảng trắng. Bạn đang khai báo num
nhưng nó không bao giờ được sử dụng. Một cách an toàn hơn sẽ là:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Điều này sẽ vẫn có vấn đề nếu các tệp của bạn chứa dòng mới nhưng ít nhất sẽ không bị hỏng nếu đường dẫn của bạn chứa khoảng trắng.
Nếu tất cả các tệp trong cùng một thư mục, nó có thể được đơn giản hóa hơn nữa bằng cách sử dụng Globing. Bạn cũng có thể sử dụng mở rộng tham số để tạo foo_rotated.JPG1
thay vì foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
mogrify -rotate 90 *.jpg
Tốt hơn One-Liner về luân tất cả hình ảnh với ImageMagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
sẽ hoàn toàn xoay tất cả .JPG
bắt đầu với DSC
trong p
thư mục
Mogrify (một phần của fantemagick ) khác Convert
ở chỗ nó sửa đổi tệp gốc
http://www.imagemagick.org/script/mogrify.php
Một phương pháp đơn giản sử dụng PE (Mở rộng tham số) là
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
cụ thể trong đó, đó là cú pháp POSIX tiêu chuẩn hoàn hảo.
Không phân tích cú phápls
và ls
không bắt buộc ở đây. Hơn nữa, bạn nên trích dẫn các biến của mình trong trường hợp chúng chứa khoảng trắng.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Không phải là một giải pháp tưởng tượng, nhưng
sips -r 90 *.JPG
sẽ xoay tất cả các hình ảnh kết thúc bằng .JPG 90 độ. Đó là một lót tốt.
Tôi cần phải tham khảo các tập tin như $file
, tức là
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Bạn có thể sao chép / dán mã này trong ubfox và lưu nó dưới dạng "rotation.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Sau khi lưu tệp này, hãy chạy nó từ thiết bị đầu cuối bằng cách sử dụng ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. thêm"${file%.JPG}"_rotated.JPG
sẽ là imho thích hợp hơn. Chúc mừng!