これはややスレッドのネクロマンシーですが、私はこの問題に直面したばかりで、元のポスターではなくても、Google から来た私のような人々のための解決策があります。
前述のように、putImageData はアルファ ブレンドではなくピクセルを直接置き換えますが、これはアルファ データを保持することも意味します。次に、drawImage を使用してアルファ ブレンディングでその画像を再描画できます。
例として、200 x 100 ピクセルのキャンバスと 100 x 100 の imageData オブジェクトがあるとします。
// our canvas
var canvas = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");
// our imageData, created in whatever fashion, with alpha as appropriate...
var data = /* ... */
// lets make the right half of our canvas blue
ctx.fillStyle="blue";
ctx.rect(100, 0, 100, 100);
ctx.fill();
// now draw our image data to the left (white) half, pixels are replaced
ctx.putImageData(data, 0, 0, 100, 100);
// now the magic, draw the canvas to itself with clipping
ctx.drawImage(canvas, 100, 0, 100, 100, 100, 0, 100, 100);
出来上がり。画像の右半分は、青色の背景とブレンドされた画像データであり、ハードウェア アシストでレンダリングされています。