gpt4 book ai didi

javascript - fabricjs:在 loadFromJSON 之后保留对象图像过滤器的正确索引

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:07 28 4
gpt4 key购买 nike

我正在对对象应用滤镜(在 image filters demo 之后),一切正常,但在我保存并加载 Canvas 后,图像滤镜会更改索引。

目前我有四个过滤器,它们按索引应用(如演示中所示)。

0 : Grayscale

1 : Invert

2 : Remove Color

3 :- Blend Color

因此,如果我应用灰度并删除颜色,“过滤器”数组看起来像这样,索引 0 和 2 是正确的...

enter image description here

但在我加载 Canvas 后(使用 loadFromJSON),对象的“过滤器”数组看起来像这样,索引已重置...

enter image description here

有什么方法可以加载对象并保留过滤器索引?有依赖于此的代码,当我加载包含带有过滤器的对象的 Canvas 时,它会导致错误。

我尝试在创建对象时应用以下内容...

   oImg.filters = [
false,
false,
false,
false
];;

创建对象时它工作正常...

enter image description here

但是当它被加载时,错误的索引被删除并且它的结果相同......

enter image description here

最佳答案

我设法通过更改我应用和检索过滤器的方式(按类型而不是索引)来实现此功能。我只是检查过滤器是否存在(通过“类型”而不是索引),然后将过滤器拼接在所需的索引处。

改变了这个功能...

getFilter(index) { 
var obj = canvas.getActiveObject();
return obj.filters[index];
}

对于这个...

getFilter(type) { 
var obj = canvas.getActiveObject();
if (obj) {
filter = null;
obj.filters.forEach(function(f) {
if (f.type == type) {
filter = f;
}
});
return filter;
}
}

改变了这个功能...

applyFilter(index, filter) {
var object = canvas.getActiveObject();
object.filters[index] = filter;
object.applyFilters();
canvas.renderAll();
}

对于这个...

applyFilter(type, filterIndex, filter) {
var obj = canvas.getActiveObject();
var indexExists = false;
var filterFound = false;

if (obj) {
obj.filters.forEach(function(f, i) {
if (f.type == type) {
filterFound = true;
obj.filters[i] = filter;
}
if (filterIndex == i) {
indexExists = true;
}
});

if (!filterFound && indexExists) {
obj.filters.splice(filterIndex, 0, filter);
} else if (!filterFound && !indexExists) {
obj.filters[filterIndex] = filter;
}

}
obj.applyFilters();
canvas.renderAll();
}

改变了这个功能...

applyFilterValue(index, prop, value) {
var obj = canvas.getActiveObject();
if (obj.filters[index]) {
obj.filters[index][prop] = value;
obj.applyFilters();
canvas.renderAll();
}
}

对于这个...

applyFilterValue(type, filterIndex, prop, value) {
var obj = canvas.getActiveObject();
if (obj) {
obj.filters.forEach(function(f, i) {
if (f.type == type) {
obj.filters[i][prop] = value;
}
});
}
obj.applyFilters();
canvas.renderAll();
}

关于javascript - fabricjs:在 loadFromJSON 之后保留对象图像过滤器的正确索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313621/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com