2012-06-27 36 views
5

Tôi muốn cắt một vòng tròn ra khỏi hình ảnh bằng cách sử dụng rmagick.Cắt hình tròn ra khỏi hình ảnh bằng RMagick

Dưới đây là một ví dụ về những gì tôi muốn để có thể thực hiện:

http://img375.imageshack.us/img375/1153/walterf.jpg http://img375.imageshack.us/img375/1153/walterf.jpg ->http://img15.imageshack.us/img15/8129/circlethumb.png

Nó có vẻ như tôi muốn sử dụng http://studio.imagemagick.org/RMagick/doc/draw.html#circle để cắt một vòng tròn, và sau đó clip_path để mặt nạ nó, nhưng các tài liệu không rõ ràng. Có ai có thể chỉ cho tôi đúng hướng không?

Trả lời

12
require 'rmagick' 

im = Magick::Image.read('walter.jpg').first 

circle = Magick::Image.new 200, 200 
gc = Magick::Draw.new 
gc.fill 'black' 
gc.circle 100, 100, 100, 1 
gc.draw circle 

mask = circle.blur_image(0,1).negate 

mask.matte = false 
im.matte = true 
im.composite!(mask, Magick::CenterGravity, Magick::CopyOpacityCompositeOp) 

im.write 'walter_circle.png' 
+0

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 –

+0

Giải pháp này không hoạt động cho hình ảnh png có kênh alpha – Dmitry

1

Đâ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.

+0

Bạn có thể đưa ra tham chiếu Rmagic không? – Almaron

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