2012-06-27 15 views
5

Ich möchte mit rmagick einen Kreis aus einem Bild herausschneiden.Kreis mit RMagick aus dem Bild schneiden

Hier ist ein Beispiel dafür, was ich erreichen können, möchten:

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

Es scheint, wie ich http://studio.imagemagick.org/RMagick/doc/draw.html#circle verwenden möchten, einen Kreis zu schneiden, und clip_path dann zu maskieren es, aber die Dokumente sind nicht sehr klar. Kann mir jemand in die richtige Richtung zeigen?

Antwort

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

Wie würden Sie das mit zwei Bildern machen? Anstelle eines Kreises mit einem transparenten Bild –

+0

Diese Lösung funktioniert nicht für ein PNG-Bild mit Alphakanal – Dmitry

1

Dies ist, wie ich es mit Imagemagick tun würde, und 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"); 

Sie sollten den Prozess folgen können?

Temporäre Bilder später bereinigen - Ich neige dazu, die temporären Bilder im .miff-Format zu speichern und dann eine Schleife zu schreiben, um danach alle .miff-Bilder zu löschen. Alternativ lassen Sie sie einfach und wenn Sie den gleichen Namen für die temporäre Bilder verwenden, werden sie jedes Mal überschrieben, wenn der Code ausgeführt wird.

+0

Könnten Sie bitte eine Rmagic-Referenz geben? – Almaron

Verwandte Themen