Filter 调用画布函数'loadFromJson'时不应用混合筛选器`
当我对图像执行Filter 调用画布函数'loadFromJson'时不应用混合筛选器`,filter,fabricjs,blending,Filter,Fabricjs,Blending,当我对图像执行blend过滤并将画布转换为JSON时 然后我再次从JSON加载画布,当时我的过滤器没有应用 我使用的是结构版本1.7.22 我的筛选代码如下所示: canvas.getActiveObject().filters.push(new fabric.Image.filters.BlendColor({ color: '#ff0000', mode: 'add', a
blend
过滤并将画布转换为JSON时
然后我再次从JSON加载画布,当时我的过滤器没有应用
我使用的是结构版本1.7.22
我的筛选代码如下所示:
canvas.getActiveObject().filters.push(new fabric.Image.filters.BlendColor({
color: '#ff0000',
mode: 'add',
alpha: 0.8
}))
canvas.getActiveObject().applyFilters(canvas.renderAll.bind(canvas));
在画布加载到JSON后,所有其他过滤器都能正常工作,但只有混合过滤器不能工作。
我的筛选器中是否缺少任何属性
我制作了一把小提琴来代表这个问题:
这似乎是由于
Blend.toObject()
未保存其类类型而导致的错误,因此Blend
过滤器在序列化时没有type:'Blend'
。为了正确地反序列化对象,Fabric解析其类型
属性,当它没有为序列化过滤器找到一个属性时,它只是放弃它
以下是一个修补程序,可用于修复此问题:
fabric.Image.filters.Blend.prototype.toObject = function() {
return fabric.util.object.extend(this.callSuper('toObject'), {
color: this.color,
image: this.image,
mode: this.mode,
alpha: this.alpha
});
}
BaseFilter.prototype.toObject()
确实设置了类型
属性,因此从它返回的对象扩展Blend.prototype.toObject()
是有意义的
注:最新的fabric.js 2.4+没有这个问题,因此这是升级的另一个原因。@mayurkukakadiya当然,这里有一个补丁供您使用:。只需确保在序列化过滤器之前调用它。