对于一个项目,我需要将各种类型的图像添加到画布,保存为 JSON 并再次加载。不同的类型没有任何特定的属性,我只需要类型不同即可。
我创建了一个基于 Fabric.Image 的新类,如下所示:
fabric.Icon = fabric.util.createClass(fabric.Image, {
type: "icon",
initialize: function (element, options) {
this.callSuper("initialize", element, options);
},
_render: function (ctx) {
this.callSuper("_render", ctx);
},
});
fabric.Icon.fromObject = function (object, callback) {
return fabric.Object._fromObject("Icon", object, callback);
};
之后,我使用 SVG 图像添加这种新类型的新对象:
let newImage = new Image(); //HTML Image type, not FabricJS
newImage.onload = () => {
let icon = new fabric.Icon(newImage); //my subclass of fabric.Image class
this.canvas.add(icon);
};
newImage.src = "image.svg";
当我将画布导出为 JSON 时
let savedJSON = canvas.toJSON()
并将其加载回来
canvas.loadFromJSON(savedJSON, function () {
canvas.requestRenderAll();
}
我收到以下错误
未捕获的类型错误:无法在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是类型“(CSSImageValue或HTMLImageElement或SVGImageElement或HTMLVideoElement或HTMLCanvasElement或ImageBitmap或OffscreenCanvas)”
当我使用标准 Fabric.Image 类时,一切正常。我应该重写子类中的其他方法吗?或者我应该以其他方式区分各种图像类型?
茅侃侃
跃然一笑
相关分类