基本思路
- 先转base64
- 将图片画到canvas(canvas.drawImage())
- 通过canvas.toDataURL()生成base64 - 再用base64转可以上传的blob或file
upload3DNoticeImg(imgSrc) {
return new Promise((resolve, reject) => {
let image = new Image();
image.src = imgSrc;
image.setAttribute("crossOrigin", 'Anonymous');
let that = this
image.onload = function() {
let t = this.src.split('?')[0]
let fileIndex = t.lastIndexOf("/");
let filename = t.substr(fileIndex + 1);
let base64 = that.getBase64Image(image);
let blob = that.dataURLtoBlob(base64);
let file = that.blobToFile(blob, filename);
})
},
getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
var dataURL = canvas.toDataURL("image/" + ext);
return dataURL;
},
dataURLtoBlob(dataurl) {
let arr = dataurl.split(',');
let mime = arr[0].match(/:(.*?);/)[1];
let bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {
type: mime
});
},
blobToFile(theBlob, fileName) {
theBlob.lastModifiedDate = new Date();
theBlob.name = fileName;
return theBlob;
},