扩展 KineticJS - 自定义过滤器

Posted

技术标签:

【中文标题】扩展 KineticJS - 自定义过滤器【英文标题】:extending KineticJS - custom filter 【发布时间】:2014-03-09 01:46:54 【问题描述】:

我正在尝试向 KineticJS 添加对比度作为过滤器(我知道,从技术上讲,它不是过滤器)。它可以工作,但我也想添加contrast() 修饰符(比如noise() 用于噪声过滤器等)。

这是我的函数(包括 KineticJS 5.0.1 库之后):

(function() 

    Kinetic.Filters.Contrast = function(imageData) 
        var data = imageData.data,
            len = data.length,
            i,
            adjust = this.contrast(),
            x = [];

            //[cut] processing, not important here
    ;

    Kinetic.Factory.addGetterSetter(Kinetic.Node, 'contrast', 0, null, Kinetic.Factory.afterSetFilter);
)();

如您所见,Kinetic.Factory.addGetterSetter 应该为我提供 contrast() 修饰符,但它没有。当我运行代码时,结果是TypeError: imgs.contrast is not a function:

imgs.filters([Kinetic.Filters.Contrast]);
imgs.contrast(30);

我做错了什么?

//更新 我的临时解决方案:只需将我的函数放入 kineticJS 文件中。不完美,但它有效。

【问题讨论】:

【参考方案1】:

从我从documentation 中可以看出,您所拥有的应该可以工作。但是,当我自己尝试时,我最终遇到了同样的错误。借鉴这个*** answer,看起来另一种方法是通过动力学图像的配置对象设置过滤器:

    var myImg = new Kinetic.Image(
      image: imageObj,
      filter: Kinetic.Filters.Contrast
    );

Fiddle here(错误与尝试将过滤器应用于来自另一个域的图像有关,我认为可以打折)。

【讨论】:

从技术上讲,您的解决方案还可以,但我的画布上有很多动态添加的对象。所以它很难实现,我认为在我的情况下性能还不够好(但我没有做任何测试)。我的临时解决方案:只需将函数放入 kineticJS 文件中。不完美,但它有效。

以上是关于扩展 KineticJS - 自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过自定义扩展更新 Thunderbird 中的过滤规则?

Spring Security4实战与原理分析视频课程( 扩展+自定义)

Spring Security4实战与原理分析视频课程( 扩展+自定义)

自定义模板语言之simple_tag和自定义过滤器

自定义 logback 日志过滤器

django自定义模板标签和过滤器