【问题标题】:How to apply a filter to a shape with image fill in KonvaJS?如何在 KonvaJS 中对带有图像填充的形状应用过滤器?
【发布时间】:2016-06-30 23:42:33
【问题描述】:

我正在使用 Konva.js 做一些画布动画。我有圆形,带有图像填充,并且想将颜色叠加/过滤器应用于形状 (RGBA)。

这就是我创建 Shape 对象的方式:

var konvaObject = new Konva.Circle({
    x: 100,
    y: 100,
    radius: 300,
    stroke: this.color,
    strokeWidth: 6,
    fillPatternRepeat: 'no-repeat',
});

// load the image into the shape:
var imageObj = new Image();
imageObj.onload = function () {
    konvaObject.fillPatternImage(imageObj);
    konvaObject.draw();
}
imageObj.src = 'www.demo.com/anImageName.png';

演示:http://jsbin.com/winugimeme/edit?js,output

The Docs outline an RGBA filter,但据我所知,它只能应用于Konva.Image 项目。

有没有办法重新编写上面的代码,以便我可以将过滤器应用于形状对象/填充图像?

【问题讨论】:

    标签: javascript canvas kineticjs konvajs


    【解决方案1】:

    根据过滤器文档,您必须在应用过滤器之前缓存形状http://konvajs.github.io/api/Konva.Filters.html#RGBA

    node.cache();
    node.filters([Konva.Filters.RGBA]);
    node.blue(120);
    node.green(200);
    node.alpha(0.3);
    

    注意:jsbin 演示不适用于此示例,因为填充图像应启用 CORS(例如托管在同一域上)。

    【讨论】:

    • 我尝试了上述方法并得到了上述 CORS 错误。有什么办法可以绕过 CORS 限制..?我正在从 CDN 加载图像。当我可以链接来自同一个 CDN 的图像并让它们作为图像标签加载时,我真的不明白为什么这是一个 CORS 问题。为什么在画布上操作它们会导致 CORS 错误?
    • 你可以试试这个技巧让它工作 "imageObj.crossOrigin = "Anonymous ";"
    • 不幸的是,我的 CDN 没有启用 CORS,并且托管在外部域上。但我想我只是不明白为什么会有这个限制。我可以通过<img>标签从CDN加载图片就好了,那为什么我不能在画布上做同样的事情呢?
    • 我可以将它加载到画布中。但是你不能“改变”它(从画布中读取)。这就是过滤器正在做的事情。
    • 确实如此。那么有没有办法覆盖这个限制?我想我不明白这个安全策略在保护最终用户免受什么伤害。
    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多