Đây là cách tôi sẽ làm điều đó với ImageMagick và php:
// Canvas the same size as the final image
exec("convert -size 800x533 xc:white white.jpg");
// The mask
exec("convert -size 800x533 xc:none -draw \"fill black circle 400,265 400,50\" write_mask.png");
// Cut the whole out of the canvas
exec("composite -compose Dst_Out write_mask.png white.jpg -matte step.png");
// Put the canvas over the image and trim off excess white background
exec("convert IMG_5745.jpg step.png -composite -trim final.jpg");
Bạn sẽ có thể theo dõi quá trình?
Làm sạch hình ảnh tạm thời sau đó - Tôi có xu hướng lưu hình ảnh tạm thời ở định dạng .miff và sau đó viết vòng lặp để xóa tất cả hình ảnh .miff sau đó. Alternativly chỉ để lại cho họ và nếu bạn sử dụng cùng một tên cho hình ảnh tạm thời họ sẽ được ghi đè mỗi khi mã được chạy.
Bạn sẽ làm như thế nào với hai hình ảnh? Thay vì hình tròn, với hình ảnh trong suốt –
Giải pháp này không hoạt động cho hình ảnh png có kênh alpha – Dmitry