javascript - JS : Alter Color for specific image in HTML Canvas

标签 javascript html canvas drawing

假设我得到了左侧的 Sprite ,我想在图像上应用红色滤镜,然后再将其绘制到 Canvas 中,使其看起来像右侧的 Sprite 。 http://puu.sh/6dQ0E.png

有办法吗? 它可以分两步完成,但我不知道是否可以绘制与图像形状完全相同的几何图形。 (例如:在其上绘制一个矩形将不匹配。)

注意:我希望滤镜只应用于此图像,而不是整个 Canvas 。

最佳答案

您可以组合 2 个过滤操作,仅在现有 Sprite 的顶部绘制红色过滤器。

globalCompositeOperation="source-atop"将导致新绘图仅绘制在现有非透明像素之上。

globalAlpha 将使您的新绘图半透明。

综合起来,您可以绘制一个半透明滤镜,该滤镜仅填充非透明幻影存在的位置。

然后只需在现有 Sprite 上绘制一个红色矩形(该矩形仅在现有幽灵内部可见)。

enter image description here

ctx.drawImage(ghostSprites,0,0);
ctx.globalAlpha=0.62;
ctx.globalCompositeOperation="source-atop";
ctx.fillStyle="red";
ctx.fillRect(spriteX,spriteY,spriteWidth,spriteHeight);

演示:http://jsfiddle.net/m1erickson/W4XrG/

从这里...

请注意,您的 Sprite 的黑色轮廓已从红色滤镜中洗掉。

您还可以使用 context.getImageData 只获取幽灵的黑色像素。然后在你的红色过滤重影上重新绘制那些黑色像素,这样黑色轮廓就不会被洗掉。如果您有雄心壮志,可以尝试一下!

祝你的项目好运!

代码如下

<style>
    body{ background-color: ivory; padding:20px;}
    #canvas{border:1px solid red;}
</style>

<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    var img=new Image();
    img.onload=start;
    img.crossOrigin="anonymous";
    img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/temp0a.png";
    function start(){}

    var spriteX=0;
    var spriteY=0;
    var spriteWidth=133;
    var spriteHeight=161

    $("#recolor").click(function(){
        ctx.drawImage(img,0,0);
        ctx.globalAlpha=0.62;
        ctx.globalCompositeOperation="source-atop";
        ctx.fillStyle="red";
        ctx.fillRect(spriteX,spriteY,spriteWidth,spriteHeight);
    });

}); // end $(function(){});
</script>

</head>

<body>
    <p>Before</p>
    <img src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/temp0a.png">
    <p>After</p>
    <button id="recolor">Click to recolor the green sprite</button><br>
    <canvas id="canvas" width=300 height=161></canvas>
</body>
</html>

关于javascript - JS : Alter Color for specific image in HTML Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20999759/

相关文章:

javascript - 如何为 Canvas 点创建简单和高级的工具提示

javascript - addClass 和 removeClass 无法正常工作

jquery - e.pageX 在所有分辨率下都无法正常工作

javascript - angularjs - $http 读取 json 并等待回调

javascript - 停止倒数计时器在 javascript 中重新启动

html - 如何在没有固定高度的情况下将条形图条附加到底部

javascript - 将坐标外推到 Canvas 对象的边缘

javascript - 点击事件后 Canvas 消失

javascript - 在 Node 中,如何使用 Promise 从多个 URL 请求 JSON?

javascript - 在嵌套数组中创建带有 javascript 错误的游戏