2012-01-23 14 views
21

Estoy tratando de usar drawImage para dibujar un PNG semitransparente en un elemento canvas. Sin embargo, dibuja la imagen como completamente opaca. Cuando miro el recurso que se está cargando y cargo el PNG real en el navegador, muestra la transparencia, pero cuando lo dibujo en el lienzo, no lo hace. ¿Algunas ideas?Cómo dibujar PNG en un elemento canvas - sin transparencia

Aquí está el código:

drawing = new Image() 
drawing.src = "draw.png" 
context.drawImage(drawing,0,0); 
+1

Por favor, muestran un caso de prueba reproducible con el problema, y ​​el sistema operativo/navegador/versión en la que es defecto. Esto generalmente funciona correctamente. – Phrogz

+0

Tuve el mismo problema y mi html se parece a este [uno] (http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_canvas_tut_img). ¿Importa dónde se coloca el script? Cuando presiona enviar, funciona, pero cuando recarga la página, la imagen no se representa –

Respuesta

3

Debería funcionar bien, ¿está seguro de que su imagen es muy transparente y no sólo blanco en el fondo?

He aquí un ejemplo del dibujo de un PNG transparente sobre un rectángulo negro basar su código fuera de:

http://jsfiddle.net/5P2Ms/

3

Si el equipo está en un bucle de render, que necesita para asegurarse de ejecutar context.clearRect(0, 0, width, height) primero, de lo contrario, solo está escribiendo el png sobre el png en cada fotograma, que eventualmente será opaco. (Pero los cuadros se procesan rápidamente, por lo que no se verá a simple vista)

23

No olvide agregar un detector de eventos al evento de carga de la imagen. La carga de imágenes es algo que sucede en segundo plano, por lo que cuando el intérprete de JavaScript llega a la parte lienzo.dibujar, lo más probable es que la imagen no se haya cargado todavía y que sea solo un objeto de imagen vacío, sin contenido.

drawing = new Image(); 
drawing.src = "draw.png"; // can also be a remote URL e.g. http:// 
drawing.onload = function() { 
    context.drawImage(drawing,0,0); 
}; 
1

NB, si era utilizar canvas.toDataURL y establece los mimetype a otra cosa que no sea decir gif o png, las partes transparentes de la imagen será completamente negro.

drawing = new Image(); 
drawing.onload = function() { 
    context.drawImage(drawing,0,0); 
    var base64 = canvas.toDataURL('image/png', 1); 
}; 
drawing.src = "draw.png"; 
+0

¿Qué hace realmente la variable "base64" en este código? No lo veo escrito en ningún otro lado. – VagueExplanation

+0

@vagueexplanation Haz cuatro. –

2

Simplemente puede insertar cualquier imagen transparente usando Image objeto:

var canvas=document.getElementById("canvas"); 
 
var context=canvas.getContext('2d'); 
 
var image=new Image(); 
 
image.onload=function(){ 
 
context.drawImage(image,0,0,canvas.width,canvas.height); 
 
}; 
 
image.src="http://www.lunapic.com/editor/premade/transparent.gif";
<canvas id="canvas" width="500" height="500">your canvas loads here</canvas>

Cuestiones relacionadas