Canvas で画像を開くにはどうすればよいですか? エンコードされた
私は使用しています
var strDataURI = oCanvas.toDataURL();
出力は、エンコードされた Base 64 イメージです。この画像をキャンバスに描画するにはどうすればよいですか?
strDataURI
を使用してイメージを作成したいですか? 可能ですか?
そうでない場合、キャンバスに画像をロードするための解決策は何でしょうか?
データ URL を指定すると、画像の をデータ URLに設定することで、(ページ上または純粋に JS 内のいずれかで) 画像を作成できsrc
ます。例えば:
var img = new Image;
img.src = strDataURI;
HTML5 キャンバス コンテキストのdrawImage()
メソッドを使用すると、画像 (またはキャンバス、またはビデオ) のすべてまたは一部をキャンバスにコピーできます。
次のように使用できます。
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;
編集onload
: 以前、このスペースで、データ URI が関係している場合はハンドラーを使用する必要がない可能性があることを提案しました。この質問の実験的テストに基づいて、そうするのは安全ではありません。上記のシーケンス — イメージを作成しonload
、新しいイメージを使用するように を設定し、次に を設定するsrc
— は、一部のブラウザで結果を確実に使用するために必要です。
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);
}
おそらく、このフィドルはThumbGen に役立つでしょう - jsFiddle File API と Canvas を使用して、画像のサムネイルを動的に生成します。
(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);
javascript で、キャンバス ID の選択に jquery を使用:
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>