javascript - 应用图像过滤器加载 fabric.image 的 fabric js 子类

标签 javascript canvas fabricjs

我在加载保存到我的子类图像对象的图像过滤器时遇到问题。这是我的子类的代码:

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/

相关文章:

javascript - 将对象转换为字符串数组?

javascript - 单击菜单项以在主干 View 中突出显示

javascript - 如何获取 JSON 中的 URL 并将其放入模式中?

java - 如何将 Android View 渲染到 Canvas 而不先渲染它(即没有完整布局)

android - 如何在 android 的 Canvas 上添加多个可编辑的文本?

javascript - Fabric.js : Is there any issue for creating multiple objects using only one variable?

Javascript引用错误: TL not defined even though it's explicity defined in *. js文件

javascript - 圆不会在 Canvas 上绘制

javascript - 如何在 Canvas 上绘制线条 JS 动画

javascript - 使用 fabric.js 绘制虚线