Загрузка подкласса fabric js из fabric.image с примененным фильтром изображения

У меня проблема с загрузкой фильтра изображения, который сохраняется в моем объекте изображения подкласса. Вот код моего подкласса:

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'

person user1767811    schedule 23.10.2012    source источник


Ответы (1)


Поскольку вы никогда не вызываете здесь функцию 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);
    });
};
person unknownnf    schedule 15.11.2012