2012-01-23 17 views
21

Próbuję użyć drawImage, aby narysować półprzezroczysty PNG na elemencie canvas. Jednak rysuje obraz jako całkowicie nieprzezroczysty. Kiedy patrzę na ładowany zasobnik i ładuję aktualny PNG w przeglądarce, pokazuje on przezroczystość, ale kiedy rysuję go na płótnie, nie jest. Jakieś pomysły?Rysowanie PNG do elementu canvas - niewidoczne przezroczystość

Oto kod:

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

Proszę pokazać powtarzalnej przypadek testowy z problemem, a OS/przeglądarki/wersji, gdzie to jest w braku. Z reguły działa poprawnie. – Phrogz

+0

Miałem ten sam problem i mój html wygląda tak [jeden] (http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_canvas_tut_img). Czy ma znaczenie miejsce umieszczenia skryptu? Po naciśnięciu przycisku submit działa, ale po ponownym załadowaniu strony obraz nie jest renderowany. –

Odpowiedz

3

To powinno działać dobrze, jesteś pewien obraz jest bardzo przejrzysty, a nie tylko biały w tle?

Oto przykład z rysunku przejrzystego PNG na czarnym prostokącie oprzeć swój kod off:

http://jsfiddle.net/5P2Ms/

3

Jeśli rysunek go w pętli uczynić, trzeba się upewnić, aby uruchomić context.clearRect(0, 0, width, height) po pierwsze, w przeciwnym razie po prostu png png nad png każdej klatki, która ostatecznie będzie nieprzezroczysta. (Ale ramki renderują się szybko, więc nie widać tego gołym okiem.)

23

Nie zapomnij dodać detektora zdarzeń do zdarzenia ładowania obrazu. Ładowanie obrazu jest czymś, co dzieje się w tle, więc kiedy interpreter JavaScript dostanie się do części canvas.drawImage, najprawdopodobniej obraz prawdopodobnie jeszcze się nie załaduje i jest po prostu pustym obiektem obrazu, bez zawartości.

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, jeśli było wykorzystanie canvas.toDataURL i ustawić typ MIME do niczego innego niż powiedzieć gif lub png, przezroczyste fragmenty obrazu będą całkowicie czarne.

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

Jaka jest zmienna "base64" w tym kodzie? Nie widzę tego napisanego nigdzie indziej. – VagueExplanation

+0

@vagueexplanation Dodać cztery. –

2

można po prostu wstawić dowolny przezroczysty obraz używając Image obiektu:

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>

Powiązane problemy