0
如果我在画布初始加载时对SVG进行硬编码,我可以将画布剪贴为形状。现在我正在尝试使用点击功能来做到这一点。挑战在于,因为所有东西都已经加载,当我点击它并加载裁剪功能时,它会清除我的画布并只留下形状和背景。我正在寻找如何实施这个想法。我只知道如何在new
fabric.canvas
函数中加载opts
。我怀疑我将不得不获取当前的画布数据,然后应用opts
参数,但我不确定最好的方式来做到这一点。这里是我的代码:在fabricjs画布上实现ClipTo函数
var canvas = new fabric.Canvas('imageCanvas');
$('#shape').on('click', function(){
var clipPath = new fabric.Path("M161.469,0.007 C161.469,0.007 214.694,96.481 214.694,96.481 C214.694,96.481 322.948,117.266 322.948,117.266 C322.948,117.266 247.591,197.675 247.591,197.675 C247.591,197.675 261.269,306.993 261.269,306.993 C261.269,306.993 161.469,260.209 161.469,260.209 C161.469,260.209 61.667,306.993 61.667,306.993 C61.667,306.993 75.346,197.675 75.346,197.675 C75.346,197.675 -0.010,117.266 -0.010,117.266 C-0.010,117.266 108.242,96.481 108.242,96.481 C108.242,96.481 161.469,0.007 161.469,0.007",),
opts = {
controlsAboveOverlay: true,
backgroundColor: 'rgb(255,255,255)',
clipTo: function (ctx) {
if (typeof backgroundColor !== 'undefined') {
ctx.fillStyle = backgroundColor;
ctx.fillRect(0, 0, 900, 900);
}
clipPath.render(ctx);
}
}
//obviously this is not going to work
var reloadShape = JSON.stringify(canvas);
canvas.loadFromJSON(reloadShape);
new fabric.Canvas('imageCanvas', opts);
});
谢谢@AndreaBogazzi然而ctx未定义。任何想法为什么? –
它不应该。有没有机会摆弄小提琴? – AndreaBogazzi
是的,这里是一个小提琴:https://jsfiddle.net/scottrrr/em1bgcvg/1/,但它声明'不能读取'未定义的属性'moveTo'。点击应用形状后没有任何反应,但是如果你点击画布区域,形状就会出现(星形的角落,我不知道为什么对齐与硬编码不同)。这里是硬编码版本:https://jsfiddle.net/scottrrr/j83zngdh/2/ –