简体   繁体   English

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

[英]Fabric.js: clip everything but overlay image

My code on js fiddle: http://jsfiddle.net/tbqrn/170/ 我在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();
});

In my current approach everything around rectangle is hidden even overlay image. 在我目前的方法中,矩形周围的所有东西都被隐藏,甚至覆盖了图像。 I want to hide everything but overlay image, so the frame is displayed fully. 我想隐藏除重叠图像以外的所有内容,因此框架完全显示。 How can I do that? 我怎样才能做到这一点?

Just let fabricJs manage the clipping for you. 只需让fabricJs为您管理裁剪即可。 The overlay image is above clipping in fabricjs rendering stack. 重叠图片位于fabricjs渲染堆栈中的裁剪上方。

When using fabricjs do not access directly the context, but access it with fabricjs methods. 使用fabricjs时,不直接访问上下文,而是使用fabricjs方法访问上下文。 Use canvas.clipTo = function(_2dContext){} to manage your clipping. 使用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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM