2012-01-23 15 views
21

drawImageを使用してキャンバス要素に半透明のPNGを描画しようとしています。ただし、イメージを完全に不透明なものとして描画します。読み込まれているリソースを見て、実際のP​​NGをブラウザに読み込むと、透明度が示されますが、キャンバスに描画すると、透明ではありません。何か案は?ここでキャンバス要素にPNGを描画する - 透明度を表示しない

コードです:

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

が問題と再現可能なテストケースを示してください、そしてそれはOS /ブラウザ/バージョン失敗する。これは一般的に正しく動作します。 – Phrogz

+0

私は同じ問題を抱えていて、私のHTMLはこの[1](http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_canvas_tut_img)のように見えます。スクリプトの配置場所は重要ですか? submitを押すと機能しますが、ページをリロードすると画像はレンダリングされません –

答えて

3

それが正常に動作するはず、あなたのイメージが背景にちょうど白い本当に透明ではなく、あなたが確かにありますか?

は、ここでのオフにあなたのコードをベースに黒の四角形の上に透明のPNGを描画する例を示します

http://jsfiddle.net/5P2Ms/

3

あなたはレンダリングループでそれを描画している場合は、あなたが実行することを確認する必要がありcontext.clearRect(0, 0, width, height)最初に、そうでなければ、pngをすべてのフレームのpngの上に書き込んでいます。これは最終的には不透明になります。 (フレームは速くレンダリングされるので、肉眼では見えません)。

23

イメージのロードイベントにイベントリスナーを追加することを忘れないでください。イメージの読み込みはバックグラウンドで行われるものなので、JavaScriptインタプリタがcanvas.drawImageの部分に到達すると、イメージはおそらくまだロードされておらず、内容のない空のイメージオブジェクトに過ぎません。

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あなたはcanvas.toDataURLを使用していたとあなたが言うgifまたはpng以外にMIMEタイプを設定した場合、画像の透明部分は真っ黒になります。

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

"base64"という変数は実際にこのコードで何をしていますか?私はどこに書かれているのか分かりません。 – VagueExplanation

+0

@vagueexplanation 4つ作成します。 –

2

あなたは、単にImageオブジェクト使用して任意の透明画像を挿入することができます

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>

関連する問題