Фильтр смешивания Не применяется при вызове функции canvas `loadFromJson` - PullRequest
0 голосов
/ 10 декабря 2018

Когда я выполняю 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, но не работает только фильтр наложения.В моем фильтре отсутствует какое-либо свойство?

Я создал одну скрипту, которая представляет проблему: http://jsfiddle.net/Mark_1998/1pc95xef/3/

1 Ответ

0 голосов
/ 10 декабря 2018

Кажется, это ошибка, вызванная Blend.toObject() не сохранением своего типа класса, поэтому фильтр Blend заканчивается без type: 'Blend' при сериализации.Чтобы правильно десериализовать объект, Fabric анализирует его свойство type, а когда он не находит его для сериализованного фильтра, он просто оставляет его.

Вот исправление, которое вы можете использовать для исправления этого:

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() действительно устанавливает свойство type, поэтому имеет смысл просто расширить Blend.prototype.toObject() из возвращаемого объекта.

PS: последняя версия fabric.js 2.4+ неУ меня нет этой проблемы, так что это еще одна причина для обновления.

...