fabricjs - 如何使用fabric js仅通过覆盖矩形打孔?
问题描述
我正在使用fabric js 1.7.22版开发图像裁剪器。通常,每个裁剪器都会在图像上显示黑色透明覆盖层(图像看起来很暗淡),并且还显示一个 Rect。(裁剪图像看起来充满颜色的区域)。
fabric.Rect
我们可以使用带有背景图像和对象的织物 js 创建此功能。
我的问题是,当我使用GlobalCompositeOperation
withdestination-out
属性来fabric.Rect
反对时。它会在画布上打洞。
简单来说:
当我添加globalCompositeOperation
到时destination-out
,它也会在画布上打洞。
我制作了一个代码笔进行演示: https ://codepen.io/mayurkukadiya0/pen/zYYWOGL?editors=0110
我发现一个代码笔也可以做同样的事情,但是它们添加了多个画布以在单独的图层中显示图像并在单独的图层中进行矩形和叠加有没有办法做到这一点,而无需在画布后面添加外部任何画布或 css 图像?这是参考:https ://codepen.io/s0nnyv123/pen/eravaN
解决方案
尝试使用setOverlayImage
这是一个演示,基于您的codepen
var canvas = new fabric.Canvas('canvas', {preserveObjectStacking: 'true'});
canvas.setHeight(300);
canvas.setWidth(300);
canvas.setOverlayImage('https://images.pexels.com/videos/856973/free-video-856973.jpg?auto=compress&cs=tinysrgb&dpr=1&w=500', canvas.renderAll.bind(canvas), {
top: 0,
left: 0,
width: 300,
height:300,
lockMovementX: true,
lockMovementY: true,
lockRotation: true,
selectable: false,
globalCompositeOperation: 'destination-atop',
});
var overlay = new fabric.Rect({
left: 0,
top: 0,
width: 300,
height: 300,
fill: '#00000050',
selectable: false,
globalCompositeOperation: 'source-over'
});
canvas.add(overlay);
var rect = new fabric.Rect({
left: 100,
top: 100,
width: 100,
height: 100,
fill: '#451245',
globalCompositeOperation: 'destination-out'
});
canvas.add(rect);
canvas.renderAll();
推荐阅读
- mongodb - 在 groovy 语言上从 mongo db 集合中删除字段的查询应该是什么
- macos - sdl2_ttf 配置错误查找免费类型 2 库
- windows-subsystem-for-linux - Windows 桌面未显示在 WSL 上
- android - 如果特定参数正确,则打印吐司
- java - 如何逐行访问多维?
- javascript - 获取鼠标连续移动的持续时间
- angular - 我如何将哈希传递到角度 6 中的输入复选框值
- java - 更改谷歌地图的旋转轴
- ios - 无法使用“String”类型的参数为“[NSAttributedString.Key: Any]”类型的值下标
- express - Express.js 嵌套路由的数据关联问题