我在一个项目中使用fabric.js,用户可以在画布上绘制,并保存为PNG图像(使用canvas.toDataURL()函数)。 但是,我们注意到如果用户移动了一个对象并单击了保存按钮,它将保存先前移动的对象的边框和边角(移动对象或调整对象大小时始终显示边框)。 所以我们需要一种方法来在保存之前删除对象边框,这可能吗?如何从Canvas对象中移除边框和边角? [Fabric.js]
3
A
回答
13
是的。你可能要在保存图像之前关闭所有对象:如果你喜欢你的用户的想法移动和缩放的路径绘制在
canvas.deactivateAll().renderAll();
(renderAll
所有对象的失活后更新实际可视状态)
0
画布。我会和kangax的建议一起去。
或者,如果您要稍微改变行为,可以将每个路径元素上的hasBorders
和hasControls
字段设置为false。那么你永远不会看到控件/边框,因此它们永远不会被打印。但这也意味着您无法旋转或缩放路径,但仍然可以移动它们。
或者你可以更进一步,使路径无法选择(使它们不可移动,你可能也可能不想)。因此,您可以将每个路径上的selectable
字段设置为false。
为了使这一切更容易对你,你可以从fabric.js覆盖_finalizeDrawingPath
,在你自己的js文件中加入以下代码已包含fabric.js
fabric.Canvas.prototype._finalizeDrawingPath = function() {
this.contextTop.closePath();
this._isCurrentlyDrawing = false;
var minX = utilMin(this._freeDrawingXPoints),
minY = utilMin(this._freeDrawingYPoints),
maxX = utilMax(this._freeDrawingXPoints),
maxY = utilMax(this._freeDrawingYPoints),
ctx = this.contextTop,
path = [ ], xPoint, yPoint,
xPoints = this._freeDrawingXPoints,
yPoints = this._freeDrawingYPoints;
path.push('M ', xPoints[0] - minX, ' ', yPoints[0] - minY, ' ');
for (var i = 1; xPoint = xPoints[i], yPoint = yPoints[i]; i++) {
path.push('L ', xPoint - minX, ' ', yPoint - minY, ' ');
}
path = path.join('');
if (path === "M 0 0 L 0 0 ") {
return;
}
var p = new fabric.Path(path);
p.fill = null;
p.stroke = this.freeDrawingColor;
p.strokeWidth = this.freeDrawingLineWidth;
//Tyson Benson:
//Add these lines to remove borders/controls
p.hasBorders = p.hasControls = false;
//Or add this line to make the path unselectable
p.selectable = false;
this.add(p);
p.set("left", minX + (maxX - minX)/2).set("top", minY + (maxY - minY)/2).setCoords();
this.renderAll();
this.fire('path:created', { path: p });
};
后,我已删除了一些空白和简短的评论(请参考这些评论的fabric.js)。
您可以设置p.hasBorders = p.hasControls = false;
或p.selectable = false;
。你不需要两个。
相关问题
- 1. 如何在Fabric.js中删除对象周围的蓝色边框
- 2. Fabric.js将对象从toDataURL中移除
- 3. 移除列边框
- 4. html从内表中移除边框
- 5. 选择框:移除边框
- 6. 从Web浏览器对象中删除滚动条和边框
- 7. 如何从XAML列表框中移除“聚焦”边框?
- 8. 如何修复CSS边框半径从剪掉边框角落
- 9. UIView底部边框如何移除?
- 10. Fabric.js:无法获取边框以匹配它的(动态)对象
- 11. Apache POI:如何添加对角边框
- 12. UIImageView边和顶部圆角边框
- 13. 如何从Fancybox 2中删除边框?
- 14. WPF边框对象边框CornerRadius不同于边框背景CornerRadius
- 15. React Native:从NavigatorIOS移除底部边框
- 16. 从ggmap对象中获取边界框
- 17. 创建对角线边框
- 18. 如何从对话框中删除边框?
- 19. 如何从Canvas中的filltext()中删除文本多边形?
- 20. 从HBITMAP中删除边框
- 21. 从JComboBox中删除边框
- 22. 如何消除div边框的边距
- 23. 如何从jvectormap中删除描边或边框
- 24. 删除闪存对象边框
- 25. Android Canvas绘图弧边框
- 26. CSS3角边框
- 27. 角边框
- 28. 圆角边框
- 29. 从IE11中的对象元素中删除边框
- 30. 的UIButton圆角和边框
对于新版本的织物“deactivateAll”不起作用,我们必须使用“discardActiveObject” – 2017-10-10 11:16:11