我在加载保存到我的子类图像对象的图像过滤器时遇到问题。这是我的子类的代码:
fabric.TopImage = fabric.util.createClass(fabric.Image, {
type: 'top-image',
initialize: function (element, options) {
this.callSuper('initialize', element, options);
this.set('name', 'top');
this.set('lockUniScaling', true);
},
toObject: function () {
return fabric.util.object.extend(this.callSuper('toObject'), { name: this.name });
}
});
fabric.TopImage.fromObject = function (object, callback) {
fabric.util.loadImage(object.src, function (img) {
callback && callback(new fabric.TopImage(img, object));
});
};
fabric.TopImage.async = true;
这在不应用任何过滤器的情况下工作正常。
我通过使用类似的东西向这个子类的实例添加一个过滤器:
objectToFilter.filters[0] = new fabric.Image.filters.RemoveWhite({threshold: 20, distance: 20});
objectToFilter.applyFilters(canvas.renderAll.bind(canvas));
保存对象通过具有类型、阈值和距离的过滤器对象。
但是加载这个对象会导致 all.js 文件中的错误:
Uncaught TypeError: Object #<Object> has no method 'applyTo'
最佳答案
因为您从未在那里调用 Image.fromObject 函数,所以滤镜永远不会被初始化,也无法应用。为了让过滤器按预期工作,请改用此函数:
fabric.TopImage.fromObject = function (object, callback) {
fabric.util.loadImage(object.src, function (img) {
var oImg = new fabric.TopImage(img);
oImg._initConfig(object);
oImg._initFilters(object);
callback(oImg);
});
};
关于javascript - 应用图像过滤器加载 fabric.image 的 fabric js 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13027559/