L'API tela ha metodi di composizione specificamente per cose come "disegnare solo sui pixel non trasparenti nell'immagine originale." Questo è molto più facile che fare scherzi con i dati dell'immagine.
jsFiddle esempio (ora di immagini inline con)
Punta di cappello a @ di WilliamVanRensselaer violino iniziale.
L'operazione composita che si desidera è source-in
, che significa "disegnare le parti opache di ciò che sto cercando di dipingere solo dove sono sopra i pixel opachi nell'immagine disegnata".
HTML:
<a href="javascript:doIt()">paint non-transparent regions white</a><br>
<canvas id="canvas" width="600" height="200"></canvas>
Javascript:
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");
imgSrc = "http://d.pr/Td69+";
var b = document.getElementsByTagName("body")[0];
var i = document.createElement("img");
i.src = imgSrc;
i.style.setProperty("display", "none");
i.onload = function() {
ctx.drawImage(i, 0, 0);
}
b.appendChild(i);
window.doIt = function() {
ctx.globalCompositeOperation = "source-in";
ctx.fillStyle = "#ffffff";
ctx.fillRect(0, 0, 600, 200);
}
reference
+1 per l'uso di 'globalCompositeOperation' invece di fare confusione con i dati dell'immagine. Questo dovrebbe essere gocce più veloce rispetto all'altra (completamente corretta) soluzione. – Phrogz
Questo è perfetto, ellisbben! Non solo è più veloce come menzionato da Phrogz, ma evita anche i problemi di autorizzazione all'origine, il che lo rende più applicabile in vari scenari. Saluti! –