2011-01-23 18 views
72

キャンバスで画像を開くにはどうすればよいですか?私はデータURLからキャンバスへの画像の描画

var strDataURI = oCanvas.toDataURL(); 

出力を使用してい

をエンコードすることは符号化されたベース64の画像です。この画像をキャンバスにどのように描くことができますか?

私はstrDataURIを使用してイメージを作成しますか?それは可愛いですか?
もしそうでなければ、画像をキャンバスに読み込むための解決策は何でしょうか?キャンバスのIDを選択するためのjQueryを使用してJavaScriptで

+0

@Phrogz:私はちょうど2つの新しい質問にタグ付けされた[データ-URI] ...あなただけ* *昨日ここにそのタグを作ったようです。面白い! – BoltClock

+0

@ Phrogz - 私は答えを受け入れた: – Yahoo

+0

@BoltClockああ良い;それは明らかなタグと思われ、私はそれが存在しなかったことに驚いた。私がそれが理にかなっていると思うだけではないことを喜んで見てください。 :) @AdiMathur素晴らしい!それを保つ! :) – Phrogz

答えて

132

データURLは、あなたが(ページまたは純粋にJSのいずれか)の画像を作成することができます考えますイメージのsrcをデータURLに設定します。たとえば:HTML5のCanvasコンテキストの

var img = new Image; 
img.src = strDataURI; 

drawImage() methodはキャンバスにあなたがすべて、または画像(またはキャンバス、またはビデオ)の一部をコピーすることができます。

あなたはそうのようにそれを使用することがあります:

var myCanvas = document.getElementById('my_canvas_id'); 
var ctx = myCanvas.getContext('2d'); 
var img = new Image; 
img.onload = function(){ 
    ctx.drawImage(img,0,0); // Or at whatever offset you like 
}; 
img.src = strDataURI; 

編集:私は以前にデータURIが含まれているときonloadハンドラを使用する必要はないかもしれないことを、この空間に提案しました。 this questionからの実験的テストに基づいて、それを行うことは安全ではない。上記のシーケンス - イメージを作成し、新しいイメージを使用するようにonloadを設定し、を入力してsrcに設定すると、一部のブラウザで必ずその結果を使用する必要があります。

+4

onloadハンドラの使用は間違いなく良い考えです。画像をロードするにはしばらく時間がかかるので、安全に再生する方がよいでしょう。 :) –

+1

@bebraw確かにそれについて見てみましょう:http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-immediately :) – Phrogz

+0

@Phrogzそれは与える私はエラー:var ctx = myCanvas.getContext( '2d');テストするコードをコピー/ペーストしてください。 –

-1

、:

var Canvas2 = $("#canvas2")[0]; 
     var Context2 = Canvas2.getContext("2d"); 
     var image = new Image(); 
     image.src = "images/eye.jpg"; 
     Context2.drawImage(image, 0, 0); 

HTML5:

<canvas id="canvas2"></canvas> 
+1

これは、dataURLに関連するOPの質問には答えません。 – Phrogz

+7

jQueryを使用してキャンバスを選択する理由は何ですか? document.getElementById()をタイプするのはあまりにも大変ですか? – Scottie

+0

このコードは動作しますが、質問には関係ありません –

2

おそらくこのフィドルは役に立ちますThumbGen - jsFiddleファイルAPIとキャンバスを使用して画像のサムネイルを動的に生成します。

(function (doc) { 
    var oError = null; 
    var oFileIn = doc.getElementById('fileIn'); 
    var oFileReader = new FileReader(); 
    var oImage = new Image(); 
    oFileIn.addEventListener('change', function() { 
     var oFile = this.files[0]; 
     var oLogInfo = doc.getElementById('logInfo'); 
     var rFltr = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i 
     try { 
      if (rFltr.test(oFile.type)) { 
       oFileReader.readAsDataURL(oFile); 
       oLogInfo.setAttribute('class', 'message info'); 
       throw 'Preview for ' + oFile.name; 
      } else { 
       oLogInfo.setAttribute('class', 'message error'); 
       throw oFile.name + ' is not a valid image'; 
      } 
     } catch (err) { 
      if (oError) { 
       oLogInfo.removeChild(oError); 
       oError = null; 
       $('#logInfo').fadeOut(); 
       $('#imgThumb').fadeOut(); 
      } 
      oError = doc.createTextNode(err); 
      oLogInfo.appendChild(oError); 
      $('#logInfo').fadeIn(); 
     } 
    }, false); 
    oFileReader.addEventListener('load', function (e) { 
     oImage.src = e.target.result; 
    }, false); 
    oImage.addEventListener('load', function() { 
     if (oCanvas) { 
      oCanvas = null; 
      oContext = null; 
      $('#imgThumb').fadeOut(); 
     } 
     var oCanvas = doc.getElementById('imgThumb'); 
     var oContext = oCanvas.getContext('2d'); 
     var nWidth = (this.width > 500) ? this.width/4 : this.width; 
     var nHeight = (this.height > 500) ? this.height/4 : this.height; 
     oCanvas.setAttribute('width', nWidth); 
     oCanvas.setAttribute('height', nHeight); 
     oContext.drawImage(this, 0, 0, nWidth, nHeight); 
     $('#imgThumb').fadeIn(); 
    }, false); 
})(document); 
7
function drawDataURIOnCanvas(strDataURI, canvas) { 
    "use strict"; 
    var img = new window.Image(); 
    img.addEventListener("load", function() { 
     canvas.getContext("2d").drawImage(img, 0, 0); 
    }); 
    img.setAttribute("src", strDataURI); 
} 
関連する問題