Xoay hình ảnh từ thiết bị đầu cuối


34

Tôi có một thư mục với rất nhiều hình ảnh nhưng chúng sai hướng. Tôi muốn xoay hình ảnh để định hướng chính xác (chủ yếu là ± 90 o ). Sử dụng trình xem ảnh (ảnh shotwell) tôi có thể xoay chúng riêng lẻ bằng cách nhấp vào nút xoay nhưng điều đó quá tẻ nhạt.

Tôi nhìn man shotwellshotwell --help-allnhưng không có gì để giải thích làm thế nào để gọi lệnh xoay từ dòng lệnh là.

Có cách nào tôi có thể gọi lệnh xoay của shotwell (hoặc bất kỳ trình xem nào khác) từ thiết bị đầu cuối không? Hoặc bất kỳ phương pháp nào khác để xoay hình ảnh cũng được chào đón.


1
Askubfox.com/a/432662/15811 nếu bạn muốn nó từ nautilus. Nhưng lệnh thiết bị đầu cuối bạn muốn là "chuyển đổi" từ "
fantemagick

1
Nếu bạn muốn một vòng quay không mất dữ liệu và các tệp là jpeg, hãy xem jpegtran ; fantemagick sẽ thực hiện một vòng quay mất mát (thẳng thắn) .
Rmano

Câu trả lời:


39

Nếu bạn đang tìm kiếm một triển khai bash thuần túy, convertlệnh của ImageMagick là thứ bạn đang tìm kiếm:

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

Ở trên sẽ giữ nguyên các tệp hiện có và sao chép các tệp mới được xoay để /tmpbạn có thể di chuyển hoặc sao chép chúng ở nơi khác hoặc thậm chí thay thế các tệp hiện có sau khi chuyển đổi và sau khi xác minh .

(và nó sẽ hoạt động trên tất cả các bản phát hành gần đây của Ubuntu dưới dạng phần mềm tiêu chuẩn)


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

Điều này sẽ sao chép- xoay -và đổi tên các tập tin của bạn.

Nếu bạn muốn để các tệp gốc chưa được xử lý, phương pháp này có thể hoạt động tốt cho bạn ...

Lưu ý rằng đây là phân biệt chữ hoa chữ thường: nếu các tệp của bạn được đặt tên * .jpg thay thế bằng chữ thường (hoặc * .png ...) tương ứng.


4

Nếu bạn muốn ghi đè tại chỗ, mogrifytừ bộ ImageMagick dường như là cách dễ nhất để đạt được điều này:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : Đây không phải là phương pháp xoay vòng không mất dữ liệu cho các tệp JPEG, https://www.imagemagick.org/discference-server/viewtopic.php?t=5899 . jpegtranđạt được điều này (chưa được kiểm tra):

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

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

Hoạt động hoàn hảo
Paul Jones

Mogrify là một con dao Thụy Sĩ khi nói đến việc chỉnh sửa ảnh hàng loạt đơn giản, nhanh chóng
EA304GT

Câu trả lời tốt nhất, tại sao bạn không muốn làm điều này tại chỗ?
mLstudent33

1
@ mLstudent33: Câu hỏi hay. Dường như mogrifykhông mất dữ liệu cho các tệp JPEG, nhưng jpegtranlà.
krlmlr

3

Đây là cách tôi làm điều đó:

  1. Cài đặt gThumb

    sudo apt-get install gthumb
  2. Mở nautilus và vào thư mục hình ảnh của bạn. Nhấp chuột phải vào một và chọn Open with -> gthumb.

  3. Trong viewmenu chọn Browserhoặc nhấn Escphím. Điều này sẽ mở trình duyệt thư mục hiển thị tất cả hình ảnh của bạn.

    nhập mô tả hình ảnh ở đây

  4. Nhấn Ctrlvà chọn hình ảnh bạn muốn xoay hoặc chọn tất cả chúng thông qua Ctrl+ A.

  5. Trên thanh công cụ, chọn Toolsvà sau đó Rotate Righthoặc Rotate Lefttùy thuộc vào sở thích của bạn.

    nhập mô tả hình ảnh ở đây


0

Một giải pháp hay là tạo một bộ sao lưu (ví dụ tiền tố backup-), xoay các tệp gốc tạo ra một tập các tệp mới (ví dụ tiền tố rotated-), cung cấp cho bạn một bộ

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ... và cứ thế

Các mv/ cpcông cụ [bash globbing] chỉ có thể thêm tiền tố, nó lộn xộn để đưa họ đi (nó muốn sử dụng mở rộng tham số, ewww ...)

Công renamecụ cho phép bạn sử dụng s/before/after/cú pháp thay thế (từ sedcông cụ) để hoán đổi tiền tố bảo vệ đó và ghi đè lên các tệp gốc, do đó quy trình tổng thể của bạn cho một bộ ảnh đã cho img-{1..n}.png sẽ là:

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

Chú thích:

  • bạn có thể sử dụng cpchứ không phải mv, nhưng sau đó có 2 bản sao gốc nằm xung quanh (nhược điểm là bạn có thể ghép các tiền tố, " rotated-backup-...")
  • xoay theo chiều kim đồng hồ ( -rotate 270giúp bạn 90 ° ngược chiều kim đồng hồ)
  • để theo dõi tiến trình, thêm echo "Rotating ${imgf#backup-} ... ";sau convertcác cuộc gọi (trước done)
  • đối với dạng gọn hơn (ví dụ: tập hợp các tệp được đánh số), echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";thay vào đó hãy sử dụng một số mở rộng tham số như

    (Bạn không thể xóa tiền tố và hậu tố trong cùng một bản mở rộng bash param do đó sử dụng cut)

Sau khi xác minh bạn không làm hỏng, hãy xóa ảnh bằng cách di chuyển chúng trở lại ban đầu

rename 's/^rotated-//;' rotated-*
rm backup-img-*

0

Bạn có thể sao chép / dán mã này và lưu nó dưới dạng rotate.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.


Vui lòng kiểm tra mã của bạn và liên kết đưa ra!
George Udosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.