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ư $filebạ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 numnhư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.JPG1thay 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ả .JPGbắt đầu với DSCtrong pthư 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
bashcụ 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à lskhô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.JPGsẽ là imho thích hợp hơn. Chúc mừng!