Fabric.js:剪辑除叠加图像之外的所有内容

时间:2015-12-04 08:51:56

标签: javascript canvas fabricjs

我在js小提琴上的代码: http://jsfiddle.net/tbqrn/170/

var img02URL = 'http://fabricjs.com/lib/pug.jpg';

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

//frame image, should be displayed fully.
canvas.setOverlayImage('http://cdn.1001freedownloads.com/vector/thumb/107559/Pink_Hearts_Frame.png',           canvas.renderAll.bind(canvas), {
        width: canvas.width,
        height: canvas.height 
    });
canvas.selection = false;

//rectangle that hides everithing around it.
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.rect(50,50,300,300);
ctx.closePath();
ctx.stroke();
ctx.clip();

//the image that should stay inside the frame
fabric.Image.fromURL(img02URL, function(oImg) {
    oImg.scale(.25);
    oImg.left = 140;
    oImg.top = 140;
    canvas.add(oImg);
    canvas.renderAll();
});

在我目前的方法中,矩形周围的所有内容都隐藏了覆盖图像。我想隐藏除叠加图像之外的所有内容,因此框架会完全显示。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

让fabricJs为您管理裁剪。 叠加图像位于fabricjs渲染堆栈中的剪切之上。

使用fabricjs时,不要直接访问上下文,而是使用fabricjs方法访问它。 使用canvas.clipTo = function(_2dContext){}管理裁剪。



var img02URL = 'http://fabricjs.com/lib/pug.jpg';

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

//frame image, should be displayed fully.
canvas.setOverlayImage('http://cdn.1001freedownloads.com/vector/thumb/107559/Pink_Hearts_Frame.png', 		   canvas.renderAll.bind(canvas), {
        width: canvas.width,
        height: canvas.height 
});
canvas.selection = false;

//rectangle that hides everithing around it.
canvas.clipTo = function(ctx) {
    ctx.rect(50,50,300,300);
    ctx.closePath();
};


//the image that should stay inside the frame
fabric.Image.fromURL(img02URL, function(oImg) {
    oImg.scale(.25);
    oImg.left = 140;
    oImg.top = 140;
    canvas.add(oImg);
    canvas.renderAll();
});

<script src="http://www.deltalink.it/andreab/fabric/fabric.js" ></script>
        <canvas id="canvas" width=400 height=400 style="height:500px;width:500px;"></canvas>
&#13;
&#13;
&#13;