2012-01-03 57 views
38

Tôi có một thư mục hình ảnh trên 4MB - hãy gọi thư mục này dsc_big/. Tôi muốn sử dụng convert -define jpeg:extent=2MB để chuyển đổi chúng thành dưới 2MB và sao chép dsc_big/* vào một thư mục dsc_small/ đã tồn tại.Chỉnh sửa lại kích thước hình ảnh vào thư mục mới bằng ImageMagick

Tôi đã thử convert dsc_big/* -define jpeg:extent=2MB dsc_small/ nhưng tạo hình ảnh được gọi là -0, -1, v.v.

Tôi phải làm gì?

Trả lời

48

convert được thiết kế để xử lý một tệp đầu vào theo như tôi có thể nói, mặc dù tôi phải thừa nhận rằng tôi không hiểu đầu ra bạn đang nhận được. mogrify là phù hợp hơn cho xử lý hàng loạt theo phong cách sau đây:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/* 

Nhưng thành thật tôi coi nó là nguy hiểm cho sử dụng chung (nó sẽ ghi đè lên những hình ảnh ban đầu nếu bạn quên rằng -path) vì vậy tôi luôn luôn sử dụng kết hợp với một convert cho vòng lặp cho điều này:

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done 

Gọi basename không cần thiết nếu bạn đang xử lý tệp trong thư mục hiện tại.

+0

Ngoài ra, làm cách nào để tôi có thể thực hiện điều này bằng 'mogrify'? – tekknolagi

+2

Tôi đã thêm một ví dụ nhỏ thể hiện sự hỗn loạn và một liên kết. –

+1

ImageMagick 6.8.0 có thể xử lý các tệp muliple với chuyển đổi: 'convert * .jpg * .png'. Tuy nhiên tôi không biết làm thế nào để xử lý các tên tập tin đầu ra, bởi vì ImageMagick chỉ cần đặt tên cho một số tuần tự (ví dụ: 1.png, 2.png, 3.png, và như vậy) –

1

Mặc dù đây là một câu hỏi cũ, nhưng tôi đang thêm phản hồi này vì lợi ích của bất kỳ ai khác mà tình cờ gặp phải điều này.

Tôi có cùng vấn đề chính xác và không được khuyến khích sử dụng mogrify, tôi đã viết một tiện ích dựa trên Python nhỏ gọi là easymagick để làm cho quá trình này dễ dàng hơn trong khi sử dụng lệnh convert.

Xin lưu ý, đây vẫn là một công việc đang được tiến hành. Tôi sẽ đánh giá cao bất kỳ phản hồi nào tôi có thể nhận được.

0

này làm việc cho tôi

convert -rotate 90 *.png rotate/image.jpg 

sản xuất hình ảnh-0.jpg, hình ảnh-1.jpg, hình ảnh-2.jpg ..... trong thư mục 'xoay'. Không biết cách nào để bảo toàn tên tập tin gốc.

+0

Sử dụng 'mogrify -path rotate -rotate 90 * .png' –

0

Tôi thấy rằng cd -ghi vào thư mục mong muốn và sau đó sử dụng biến bash toàn cầu $PWD làm cho convert của tôi không ném bất kỳ lỗi nào. Tôi đang sử dụng chức năng caption:http://www.imagemagick.org/Usage/text/#caption của ImageMagick để gắn nhãn hình ảnh của tôi với tên tệp cơ sở và đặt chúng vào một thư mục khác trong lần đầu tiên.

cd ~/person/photos 
mkdir labeled 
for f in $PWD/*.JPG; do 
    width=$(identify -format %w $f) 
    filename=$(basename $f .JPG) 
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100 caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg"; 
done 
+0

Cân nhắc sử dụng' "$ f" 'thay vì' $ f' trong các dòng bắt đầu 'chiều rộng = ... 'và' filename = ... 'trong trường hợp có tên tập tin có dấu cách trong đó. –

4

Đây là lệnh đã giúp tôi sau một thời gian dài thử. Tôi muốn tạo các hình thu nhỏ có kích thước giống nhau từ một danh sách lớn các hình ảnh lớn có chiều rộng và chiều cao thay đổi. Đó là để tạo một trang thư viện.

convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg 

Tôi có hình thu nhỏ có kích thước lại có cùng chiều rộng và chiều cao. :) nhờ ImageMagick.

1

Dưới đây là một giải pháp mà không sử dụng cho vòng trên console

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]' 

PS: Nếu người điều hành xóa trả lời của tôi cho 'câu trả lời lặp đi lặp lại' một lần nữa, tôi không bao giờ gửi bài trong stack overflow một lần nữa. Đọc giải pháp, đó là không phải giống hệt với bất kỳ giải pháp nào khác, giải pháp này không sử dụng cho vòng lặp trên bảng điều khiển và sử dụng ImageMagick như được yêu cầu bởi người đã đăng câu hỏi. Nếu câu trả lời phải bị xóa, hãy tiếp tục xóa câu trả lời sử dụng các gói khác vì chúng không thực sự trả lời câu hỏi

Các vấn đề liên quan