【问题标题】:Kineticjs image/shape/layer distortionKineticjs 图像/形状/图层失真
【发布时间】:2014-09-30 10:03:07
【问题描述】:

长期以来,我一直在尝试实现图像失真。经过一番搜索,我找到了 this 一个不错的。

我正在尝试将其添加到 kineticjs 项目中,我确信这是可能的,但我不明白如何将其添加或如何将其实施到我的项目中。图像不仅会失真,还会做一些滤镜颜色和亮度滤镜。

main.jsof this one 中,他们从获取整个画布的上下文开始,但我只想为一个节点(实际上是一个图像或一个图层)做这件事。

这是一个 jsfiddle,他解释了我想要实现的目标:http://jsfiddle.net/junkees/fab3w85k/1/ 在这个我有一个大问题,网格不会移动,并且 sur 永远不会扭曲图像(jsfiddle 拒绝跨域资源,那就是为什么点击它或在控制台中查看时会看到一点癫痫效果。

【问题讨论】:

    标签: javascript jquery image-processing kineticjs


    【解决方案1】:

    编辑:OP 修改后的代码运行良好。唯一的问题是跨域图像。将图像放在同一台服务器上将解决问题。以下修改后的小提琴将图像作为数据 URL 加载,而不是从另一台服务器加载。该代码无需任何其他更改即可工作:

    http://jsfiddle.net/fab3w85k/4/


    我认为您可以使用自定义形状来实现您想要的。然后您可以在其“drawFunc”中进行自定义绘图,例如像这样:

    var customShape = new Kinetic.Shape({
        drawFunc: function(context) {
            //Do all the custom drawing for your  shape here. For example:
            //context.clearRect(0, 0, 100, 100);    
        }
    });
    

    由于您拥有形状的 2d 上下文,因此您可以随心所欲地进行所有自定义绘图。每当 Kinetic 想要重绘画布时,都会调用“drawFunc”。您可以通过调用 layer.draw() 或 stage.draw() 函数让 Kinetic 调用此函数。

    【讨论】:

    • 我已经这样做了:jsfiddle.net/junkees/fab3w85k/3 这完全是我想要的失真,但没有使用 kinetic.image 因为我看不到如何使用 kinetic 处理返回的图像来工作在它上面(应用过滤器、重新缩放和其他东西)
    • @YechouaGuedj,你又是一个跨域镜像问题的受害者。请注意,由于安全问题,浏览器不允许对图像进行低级画布操作,除非正确设置了 CORS。因此,您的代码完全正确且有效。您需要做的就是将图像托管在为页面提供服务的同一域上,然后您就可以开始了。请查看我的修改以进行修复。
    • 我知道他在真实服务器上工作,但我实际上不知道如何重用扭曲的图像(只需应用 kineticjs 的过滤器颜色),我想将扭曲的图像转换为动力学对象(图像将是完美的),因为失真“只是”我的应用程序的一部分。实际上输入文件是一个图像,输出文件是一个 distortedImage,我想在输入中设置一个 kinetic.Image 并在输出上获得一个 kinetic.Image
    • 您可以为此目的使用 stage.toDataURL()。
    • 我会尝试制作一个 jsfiddle:如果它可以工作,那么对于其他搜索此功能的人来说将是完美的,如果它不会有人会告诉我为什么(我希望)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多