如何在Canvas中打開圖像?這是我使用的將數據URL中的圖像繪製到畫布上
var strDataURI = oCanvas.toDataURL();
輸出編碼
是經編碼的底座64的圖像。我如何在畫布上繪製此圖像?
我想使用strDataURI
並創建圖像?它是否可行?
如果沒有,那麼可能會有什麼解決方案將圖像加載到畫布上?
如何在Canvas中打開圖像?這是我使用的將數據URL中的圖像繪製到畫布上
var strDataURI = oCanvas.toDataURL();
輸出編碼
是經編碼的底座64的圖像。我如何在畫布上繪製此圖像?
我想使用strDataURI
並創建圖像?它是否可行?
如果沒有,那麼可能會有什麼解決方案將圖像加載到畫布上?
如果有一個數據的網址,你可以(在頁面中或純粹的JS)創建圖像通過將圖片的src
設置爲您的數據網址。例如:
var img = new Image;
img.src = strDataURI;
HTML5畫布語境的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;
編輯:我以前在這個空間建議,可能沒有必要使用onload
處理程序時數據URI參與。根據this question的實驗測試,這樣做並不安全。上面的序列 - 創建圖像,設置onload
使用新圖像,然後然後設置src
- 對於某些瀏覽器確實使用結果是必需的。
無關使用onload處理程序絕對是一個好主意。加載圖像可能需要一段時間,因此最好安全地使用它。 :) –
@bebraw讓我們看看有關肯定:http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-dataurl-be-available-immediately :) – Phrogz
@Phrogz它給了我錯誤:var ctx = myCanvas.getContext('2d');只是複製/過去你的代碼來測試 –
在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>
也許這個小提琴會幫助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);
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);
}
@Phrogz:我只標記了兩個新的問題[數據-URI] ...看來你剛纔所做的標記位置* *昨天。有趣! – BoltClock
@ Phrogz - 我接受了答案:) – Yahoo
@BoltClock噢不錯;它似乎是一個明顯的標籤,我很驚訝它不存在。很高興看到這不僅僅是我認爲它是有道理的。 :) @AdiMathur太棒了!繼續! :) – Phrogz