イメージがあります。私はctx.drawImageで描画しています。透明です。私はrgba(0,0,0,0.5)でfillRectを使用しているのでイメージを暗くしたいが、これはイメージの透明部分も暗くする。だから、私はctx.globalCompositeOperation = 'destination atop'を使ってctx.saveと復元を使うことを検討していますが、これでキャンバスの背景が白くなり、画像/塗りつぶしの背景だけが表示されます。後JavaScriptキャンバス透明イメージを暗くする
:ctx.globalCompositeOperation = '先の上' または 'ソースの' 前
ここ
は私のコードです:
/*above is drawing the background, I only want to merge the fillRect with the drawImage*/
ctx.save();
ctx.drawImage(o.image, x, y);
ctx.fillStyle = 'rgba(0,0,0,'+amount+')';
ctx.globalCompositeOperation = 'source-in';
ctx.fillRect(x, y, w, h);
ctx.globalCompositeOperation = 'source-over';
ctx.restore();
まだ背景が白くなります。透明でなくても画像が暗くなりますが、背景が白くなります。おそらく私は新しいキャンバスの要素レイヤーにこれらを配置する必要があります。 –
あなたは十分な情報を提供していません。 'multiply'は全てのピクセルを暗くし、' destination-in'はアルファチャンネルにのみ影響を与えるので、上記のコードで背景を白くすることはできません。私はそれをより明確にするためにmodの答えを与えるでしょう。 – Blindman67
よく、私はfillRectのように上の背景を描いていると言いました。私のイメージでも見ることができます。 –