【发布时间】:2018-09-14 19:30:29
【问题描述】:
我在保存和加载应用于对象的dynamic patterns 时遇到问题。
我在网上搜索了解决此问题的方法,但无济于事。我了解why it is happening,但不明白如何解决。
这基本上是我正在做的......
- 将动态模式应用于对象。
- 将画布保存到 MongoDB 使用...'JSON.stringify(canvas.toJSON([...]))'
- 使用“loadFromJSON”加载画布
- 出现错误“未捕获的 ReferenceError:patternSourceCanvas 未定义”
我在这个问题上发现的一切都可以追溯到至少 2 年前 (some even 2013),没有可靠的代码示例。
更新
这是我用来在路径上应用模式的函数...
function applyPatternOnPath(p, image, width, patternRepeat, patternPadding) {
if (patternRepeat) {
var r = 'repeat'
} else {
var r = 'no-repeat'
}
fabric.Image.fromURL(image, function(img) {
var padding = 0 + patternPadding;
img.scaleToWidth(width);
var patternSourceCanvas = new fabric.StaticCanvas();
patternSourceCanvas.add(img);
patternSourceCanvas.renderAll();
var pattern = new fabric.Pattern({
source: function() {
patternSourceCanvas.setDimensions({
width: img.getScaledWidth() + padding,
height: img.getScaledHeight() + padding
});
patternSourceCanvas.renderAll();
return patternSourceCanvas.getElement();
},
repeat: r
});
p.set('fill', pattern);
canvas.renderAll();
}, { crossOrigin: 'Anonymous' });
}
【问题讨论】:
-
我不确定,但是,
**new fabric.StaticCanvas()**在这一行,我认为您需要传递元素 ID( canvas element id )参考:fabricjs.com/static_canvas。另外,如果您将画布保存到数据库,我认为您应该使用**canvas.toDatalessJSON**并使用**canvas.loadFromDatalessJSON**加载。这样可以最大限度地减少数据。 -
我的主画布的元素 id 为 'c',所以如果我尝试使用新的 fabric.StaticCanvas('c'),当应用图案时,整个画布会变得混乱(调整大小) .感谢 toDatalessJson 提示。
标签: javascript json serialization fabricjs fabricjs2