使用RMagick剪切图像中的圆圈

时间:2012-06-27 19:51:18

标签: ruby image-processing imagemagick rmagick

我想使用rmagick从图像中剪切一个圆圈。

以下是我希望能够实现的一个例子:

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

似乎我想用http://studio.imagemagick.org/RMagick/doc/draw.html#circle来剪切一个圆圈,然后使用clip_path来掩盖它,但是文档不是很清楚。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

这就是我用Imagemagick和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");

您应该可以按照流程进行操作吗?

之后清理临时图像 - 我倾向于以.miff格式保存临时图像,然后写一个循环以删除所有.miff图像。或者只是留下它们,如果你对临时图像使用相同的名称,那么每次运行代码时它们都会被覆盖。