我有一個函數,它需要一個img元素並返回一個數據url。這工作像7/10次,並返回一個空白圖像3/10次。我通過瀏覽器(chrome)查看創建的數據url並使用相同的圖像,所以我知道這個函數返回的是破碎的圖像。任何人都可以發現原因畫布到數據網址無法正常工作
function imgToDataURL(img) {
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
var c = canvas.getContext('2d');
c.drawImage(img, 0, 0);
dataurl = canvas.toDataURL();
return dataurl;
}
$(function() {
img = new Image();
img.crossOrigin = '';
img.onload = function() {
newimg = new Image();
newimg.onload = function() {
document.body.appendChild(newimg);
}
newimg.src = imgToDataURL(img);
}
img.src = 'https://somedomain.s3.amazonaws.com/someimg.png';
});
這個例子大部分時間都在工作,但有時候會以一個大的白色矩形而不是圖像結束。
注意,出於安全考慮,帆布源圖像必須在同一個域做爲所服務在頁面主辦。因此,如果您的img.src是其他域,並且您將其他域的圖像寫入canvas,那麼canvas.toDataURL將失敗。 – markE
我已經設置好了,所以我可以使用CORS從有問題的域讀取圖像。 – user2073343
只是好奇......你爲什麼要通過畫布運行IMG?難道你不能只用.src創建一個html img元素='https://somedomain.s3.amazonaws.com/someimg.png' – markE