javascript - 如何在上面的fabric.js 1.7中使用 'clipto' func

标签 javascript fabricjs

我使用fabric.js。 我使用“clipto”功能来裁剪图像, 但在fabric.js 1.7以上版本中不起作用。

当我包含 1.6.7 或更低版本时,它运行良好。

https://jsfiddle.net/uemon/nqg2q2qs/

var canvas = new fabric.Canvas('c',{ 
backgroundColor: '#ffffff', 
});

var imgURL = 'http://fabricjs.com/lib/pug.jpg';
var path = new fabric.Path('M121.32,0L44.58,0C36.67,0,29.5,3.22,24.31,8.41\
c-5.19,5.19-8.41,12.37-8.41,20.28c0,15.82,12.87,28.69,28.69,28.69c0,0,4.4,\
0,7.48,0C36.66,72.78,8.4,101.04,8.4,101.04C2.98,106.45,0,113.66,0,121.32\
c0,7.66,2.98,14.87,8.4,20.29l0,0c5.42,5.42,12.62,8.4,20.28,8.4c7.66,0,14.87\
-2.98,20.29-8.4c0,0,28.26-28.25,43.66-43.66c0,3.08,0,7.48,0,7.48c0,15.82,\
12.87,28.69,28.69,28.69c7.66,0,14.87-2.99,20.29-8.4c5.42-5.42,8.4-12.62,8.4\
-20.28l0-76.74c0-7.66-2.98-14.87-8.4-20.29C136.19,2.98,128.98,0,121.32,0z'); 

fabric.Image.fromURL(imgURL, function(image) {

   canvas.add(image);
   image.set({
            clipTo: function(ctx) {
                path.set({ 
                        left: -100, 
                        top: -100 
                    });
                path.render(ctx);
            }
   });
   canvas.renderAll();
});  

但是当我包含1.7.0或更高版本的fabric.js时,它不起作用。

https://jsfiddle.net/uemon/affumnxh/1/

如何在1.7或以上版本中使用'clipto'功能?

提前谢谢您。

最佳答案

我可以通过使用“objectCaching: false”解决该问题。

参见https://github.com/kangax/fabric.js/issues/3454

最终代码如下。

var canvas = new fabric.Canvas('c',{ 
  backgroundColor: '#ffffff', 
});

var imgURL = 'http://fabricjs.com/lib/pug.jpg';
var path = new fabric.Path('M121.32,0L44.58,0C36.67,0,29.5,3.22,24.31,8.41\
c-5.19,5.19-8.41,12.37-8.41,20.28c0,15.82,12.87,28.69,28.69,28.69c0,0,4.4,\
0,7.48,0C36.66,72.78,8.4,101.04,8.4,101.04C2.98,106.45,0,113.66,0,121.32\
c0,7.66,2.98,14.87,8.4,20.29l0,0c5.42,5.42,12.62,8.4,20.28,8.4c7.66,0,14.87\
-2.98,20.29-8.4c0,0,28.26-28.25,43.66-43.66c0,3.08,0,7.48,0,7.48c0,15.82,\
12.87,28.69,28.69,28.69c7.66,0,14.87-2.99,20.29-8.4c5.42-5.42,8.4-12.62,8.4\
-20.28l0-76.74c0-7.66-2.98-14.87-8.4-20.29C136.19,2.98,128.98,0,121.32,0z'); 


fabric.Image.fromURL(imgURL, function(image) {

   canvas.add(image);
   image.set({
            clipTo: function(ctx) {
                path.set({ 
                        left: -100, 
                        top: -100,
                        objectCaching: false
                    });
            path.render(ctx);
        }
   });
   canvas.renderAll();
}); 

关于javascript - 如何在上面的fabric.js 1.7中使用 'clipto' func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693790/

相关文章:

javascript - 使用值选择 <select> 标签选项

javascript - 从 javascript ruby​​ on Rails 调用 Controller 方法

javascript - 不在浏览器中 - 而是处理文件

canvas - Fabricjs:使用导出和导入为 svg 时出现文本对齐问题

save - 我如何让 fabric.js 保存 Canvas 中每个对象的状态/位置并恢复以供将来编辑?

javascript - toSVG 方法不适用于 Fabric.js 的扩展类

javascript - 使用 Fabric.js 添加图像

javascript - Chrome "delete console"- 如何恢复?

php - 添加重置按钮以使用 PHP 或 javascript 重置复选框

javascript - Fabric JS 以编程方式按 ID 选择对象