2012-06-27 25 views
5

rmagick kullanarak bir görüntüden daire çizmek istiyorum. İşte Görüntünün daire dışına çıkma RMagick

Ben başarmak mümkün olmak istiyorum ne bir örnek:

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

Öyle bir daire kesmek için http://studio.imagemagick.org/RMagick/doc/draw.html#circle kullanmak istediğiniz gibi görünüyor ve sonra maskelemek için clip_path ama dokümanlar çok net değil. Beni doğru yöne yönlendirecek misiniz?

cevap

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

Bunu iki görüntü ile nasıl yaparsınız? Saydam görüntü –

+0

olan bir daire yerine Bu çözüm alfa kanalı olan bir png görüntüsü için çalışmaz – Dmitry

1

Bu benim Imagemagick ve php ile bunu görecektir:

// 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"); 

Sen süreci takip etmek gerekir?

Fotoğrafları daha sonra temizle - Tempoyu görüntülemeyi .miff biçiminde kaydetme ve sonra da tüm .miff görüntüleri silmek için bir döngü yazma eğilimindeyim. Alternativly sadece onları bırakın ve tempory görüntüleri için aynı adı kullanırsanız, kod her çalıştırıldığında üzerine yazılacaktır.

+0

Lütfen Rmagic referansı verebilir misiniz? – Almaron