有没有办法使用globalCompositeOperation" light"并同时使用source-atop? (Aka打火机,但只有已经画出的东西。)
答案 0 :(得分:2)
您一次只能设置一个合成操作。
解决方法:您可以使用第二个画布来执行“lightenAtop”:
lighten
左:原始红色矩形,中间:蓝色填充,右: lightenAtop
示例代码和演示:
此示例仅使用实心填充点亮,但您也可以drawImage
代替fillRect
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
ctx.fillStyle='rgba(250,0,0,255)';
ctx.fillRect(50,50,100,75);
lightenAtop('rgba(0,0,255,255)');
function lightenAtop(rgba){
var compositor=document.createElement('canvas');
var cctx=compositor.getContext('2d');
compositor.width=canvas.width;
compositor.height=canvas.height;
cctx.drawImage(canvas,0,0);
cctx.globalCompositeOperation='lighter';
cctx.fillStyle=rgba;
cctx.fillRect(0,0,cw,ch);
ctx.globalCompositeOperation='source-in';
ctx.drawImage(compositor,0,0);
ctx.globalCompositeOperation='source-over';
}
body{ background-color:white; }
#canvas{border:1px solid red;}
<h4>Original red rect "lightened" with blue rect</h4>
<canvas id="canvas" width=300 height=300></canvas>