2016-11-21 4 views
0

Sie müssen ein Bild in den Stoff js einfügen und abgerundete Ränder erstellen. (NICHT auf ganze Leinwand) lesen Antwort hier:Fabricjs. Wie füge ich ein Bild mit abgerundeten Rahmen ein?

Fabric.js Clip Canvas (or object group) To Polygon

Aber ich wie dieser Kerl nicht reproduzieren kann gemacht Clipping.

var clip = canvas.item(0); 
var obj = canvas.item(1); 
canvas.remove(clip); 
obj.clipTo = function(ctx) { 
    clip.render(ctx); 
}; 

Versuchte, svg rectange und Clip Bild zu machen: http://jsfiddle.net/ZxYCP/657/

Ich bin immer ein unerwartetes Verhalten ...

Antwort

2

Hier ist ein Beispiel, wie es getan werden kann:

var canvas = new fabric.Canvas('c'); 

function roundedCorners(ctx) { 
    var rect = new fabric.Rect({ 
    left:0, 
    top:0, 
    rx:20/this.scaleX, 
    ry:20/this.scaleY, 
    width:this.width, 
    height:this.height, 
    fill:'#000000' 
    }); 
    rect._render(ctx, false); 
} 

fabric.Image.fromURL('http://fabricjs.com/lib/pug.jpg', function(img) { 
    img.set({ 
    angle: 45, 
    width: 500, 
    height: 500, 
    left: 140, 
    top: 100, 
    scaleX: 0.3, 
    scaleY: 0.3, 
    clipTo: roundedCorners.bind(img) 
    }); 
    canvas.add(img).setActiveObject(img); 
}); 

Siehe Geige hier: http://jsfiddle.net/ZxYCP/659/

+0

Bu t das wird ganze Leinwand anstelle von benötigtes Objekt abschneiden, also ist das keine Lösung ... – user2455079

+0

Ahh, tut mir leid, deine Frage war mir nicht klar. Schauen Sie sich die aktualisierte Antwort an, es gibt eine Möglichkeit, dies zu erledigen. Sie können den Radius Ihrer abgerundeten Ecken mit den Eigenschaften 'rx' und' ry' ändern. In diesem Beispiel habe ich 'rx' und' ry' durch die Bildskalierung geteilt, um den Radius absolut unabhängig von der Bildskalierung zu halten, aber Sie möchten, dass es relativ auf den von Ihnen benötigten Wert gesetzt wird. Hoffentlich hilft es. – janusz

+0

Awesome, thanks =) – user2455079

Verwandte Themen