我有一个解决方案,但是它花费了太多时间。这是我的解决方案。
//------------ Image url to base64 -------------//
function convertImgToBase64(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS'),
ctx = canvas.getContext('2d'), dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
//------------ convert base64 into Blob -------------//
function dataURItoBlobImg(dataURI) {
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
现在首先需要将图像转换为base64,然后可以将其转换为Blob,有什么方法可以直接从图像URL转换为Blob。
谢谢。
最佳答案
你有没有尝试过:
HTMLCanvasElement.toBlob()
HTMLCanvasElement.toBlob()
方法创建一个Blob对象,表示画布中包含的图像;该文件可以由用户代理决定是否缓存在磁盘上或存储在内存中。如果未指定type,则图像类型为image / png。创建的图像的分辨率为96dpi。第三个参数与image / jpeg图像一起使用,以指定输出的质量。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob中的示例
var canvas = document.getElementById("canvas");
canvas.toBlob(function(blob) {
var newImg = document.createElement("img"),
url = URL.createObjectURL(blob);
newImg.onload = function() {
// no longer need to read the blob so it's revoked
URL.revokeObjectURL(url);
};
newImg.src = url;
document.body.appendChild(newImg);
});