Làm cách nào để thay đổi kích thước canvas của PNG bằng ImageMagick (GraphicsMagick)? (Làm thế nào để đệm với độ trong suốt?)


9

Ngoài ra: Làm cách nào để tôi có một PNG không vuông và "điền" "phần còn lại" của hình ảnh với độ trong suốt để hình ảnh vuông kết quả có hình ảnh gốc nằm ở giữa hình vuông?

TUYỆT VỜI, điều tôi muốn là lấy bất kỳ hình ảnh nào ở bất kỳ định dạng nào được GM hỗ trợ ở bất kỳ kích thước nào và tạo ra một PNG thu nhỏ (tối đa 40 pixel cho cả hai chiều), với tỷ lệ khung hình được duy trì, được đệm trong suốt cho hình vuông hình ảnh gốc, VÀ với mặt nạ trong suốt 40x40 PNG đã được chuẩn bị sẵn.

Tôi đã biết làm thế nào để giảm quy mô và giữ tỷ lệ khung hình; Tôi đã có lệnh để áp dụng tổng hợp của tôi. Phần còn thiếu duy nhất của tôi là hình ảnh không vuông góc vuông (đệm với độ trong suốt).

Lệnh đơn ưu tiên; chuỗi đa lệnh chấp nhận được.

(biên tập)

Thông tin thêm: Đây là lệnh tổng hợp tôi đang sử dụng:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

trong đó mask.png có các pixel trắng cho những gì tôi muốn giữ cho source-and-target.png và các pixel trong suốt cho những gì tôi muốn xóa (và trở nên trong suốt) của source-and-target.png.

Câu trả lời:


7

Lệnh này sẽ lấy bất kỳ tệp đầu vào có kích thước nào và phù hợp nhất với hình vuông 40x40 và có độ trong suốt:

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

Các gravitytùy chọn đảm bảo hình ảnh được tập trung ở cả hai chiều, và transparentđược sử dụng bất cứ nơi nào không có pixel. Sau đó, việc tổng hợp được thực hiện vớimask.png


Vì vậy, chúng ta không thể làm điều đó trong một shot với composite?
Pistos

@Pistos Tôi không rõ bạn đang làm gì với composite - nó chỉ là mặt nạ trong suốt để ẩn / hiển thị các phần của hình thu nhỏ sau khi thay đổi kích thước? Bạn có thể chỉnh sửa và thêm chuỗi lệnh bạn có cho đến nay, để chúng tôi có thể xem liệu nó có thể được kết hợp không?
Paul

@Pistos Tôi nghĩ cách tiếp cận tốt nhất là thực hiện việc kết hợp với -convert chứ không phải là cách khác. Tôi đã cập nhật câu trả lời của tôi ở trên.
Paul

Gần, nhưng không hoàn toàn. Lệnh của bạn không hoạt động như bình thường và thậm chí với các điều chỉnh, nó không hoạt động. Không sao đâu, tôi sẽ làm theo hai bước. Tôi sẽ cập nhật mọi thứ ở đây sau khi tôi nhận được các bước CLI cuối cùng, đang hoạt động. Cảm ơn một lần nữa.
Pistos

Tôi sẽ thêm -filter Catromtrước thumbnailtùy chọn vì theo kinh nghiệm của tôi, nó thường tạo ra hình ảnh chất lượng cao hơn.
thdoan

6

Một lệnh để chuyển đổi tất cả các PNG từ một thư mục:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrify là một lệnh từ gói ImageMagick. Bạn phải tạo thư mục đầu ra trước.


Đẹp một. BTW, nếu bạn cảm thấy mạo hiểm, bạn có thể bỏ qua -path resizedđể chỉnh sửa các tệp tại chỗ.
aaronk6

Điều đó thật tuyệt. Trên bản cài đặt của tôi (OSX, 1.3.35) gm mogrify, thay vào đó -path resized, hãy sử dụng-create-directories -output-directory resized
Blake

1

Đây là những gì tôi cuối cùng đã đi với. Một quá trình gồm hai bước:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Trong đó mask.png là các pixel trắng cho những gì tôi muốn giữ và các pixel trong suốt cho những gì tôi muốn che đi (loại bỏ).

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.