0

我最近使用人脸检测算法,我想在检测算法运行时在画布上添加一些过滤器。如图 1 所示,我创建了一个模式,它可以与示例或自定义过滤器一起使用(Caman.js 库)

模式:过滤器

进行选择后,我想在画布中添加过滤器或取消过滤器。有2个选项:

1) 确认按钮:

/* PREPARE ARRAYS */
//SAMPLE FILTERS (vintage = true sunrise = true)
var array1 = [vintage, sunrise, .../* selected values*/ ]; 

//CUSTOM FILTERS (vintage = 0.4, sunrise = 0.8) 
var array2 = [0.4,0.8, .../* selected values*/ ]; 

2) 取消按钮:

/* RESETS ARRAYS */
array1.length = 0;
array2.length = 0;

现在我尝试处理一个图像元素,效果很好,但只能通过单独检查所有元素。添加的过滤器越多 - 应该做出更多的 if/else-if 语句:

if(array1.contains("vintage")){
   Caman('#myIcon', function(){
      this.vintage().render(); /*.vintage & anyFilter is in Caman.js API */
   });
}else if(array1.contains("sunrise")){
  //.....etc
}

我的问题:

有什么方法可以在特定库(Caman.js)中传递字符串值,因为所有过滤器都是库中的函数,而 something.render() 显然不起作用?

例如:

function apply_Filters (*MY_FILTER_DATA*) {
    Caman('#myIcon', function(){
        this.*MY_FILTER_DATA*.render();
} 
4

1 回答 1

0

教程帮助我找到了解决方案。

解决方案:

  • 首先在数组列表中添加选定的过滤器:

    myFiltersList = [ "vintage", "filter331" ];
    
  • 对于每个元素,您应该创建一个 Caman 函数并检查列表的每个过滤器(文本值)是否包含在 Caman.js 库(函数名称)中。我用了:

    if( array[i]   in this) statement
    
  • 这将检查过滤器的文本值是否包含此中,在本例中为 Caman.js。小心你应该使用什么.this来完成这项工作。

    if(filtersList[i] in this) //in this  = in Caman.js
    
  • 检查过滤器是否存在后,必须首先以特定的语法方式准备过滤器才能工作:

    this[ filtersList[i] ] (); //or this["vintage"](); or this.vintage();
    
  • 不要忘记渲染():

    this.render();
    

完整示例:

//For each filter in the list
myFiltersList.forEach( function() {

    //Open Caman Function and Reference the 2D canvas
    Caman('#myCanvas', function () {

        //Check if the current filter is declared within the library Caman.js
        if(myFiltersList[i] in this){

            alert("filter in the list");

            //Add filter from this as filter in Caman function/
            this[myFiltersList[i]]().render();

            i++; //Increase counter
        }else{
            alert("filter not in the list");
        }
    });
});

结果:

案例“复古”:

alert("filter in the list");
this[myFiltersList[i]]().render();
i++;

案例“filter331”:

alert("filter not in the list");
于 2019-01-24T12:47:29.867 回答