所以这是我对未来自己的回答,他可能会忘记并再次陷入这个问题!
您可以通过制作一个新图像并在该图像文件中来解决它,您可以添加您的src,以便在仍然加载时可以处理图像或onload。
记住!
既然是你,你可能会删除最后一个image.src = url 以获得干净的代码,但这很重要,如果你删除那行,image.onload 将不会被触发,因为它会搜索图像源。如果您尝试使用image.srcObject 将其与mediaStream 放在一起,它将给您Resolution Overloaded,因为您仍然找不到此问题的答案,没关系,您可以先使用图像,因为您的步骤是实现how to get file from Image URL。所以这是你用来解决这个问题的方法:
downloadPreview() {
const el = this.$refs.printMe;
const options = {
type: 'dataURL'
};
this.$html2canvas(el, options).then(data => {
this.output = data;
const a = document.createElement('a');
a.style.display = 'none';
a.href = data;
// this is just optional function to download your file
a.download = `name.jpeg`;
document.body.appendChild(a);
a.click();
});
},
convertImgUrlToBase64(url) {
let self = this;
var image = new Image();
image.setAttribute('crossOrigin', 'anonymous'); // use it if you try in a different origin of your web
image.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext('2d').drawImage(this, 0, 0);
canvas.toBlob(
function(source) {
var newImg = document.createElement("img"),
url = URL.createObjectURL(source);
newImg.onload = function() {
// no longer need to read the blob so it's revoked
URL.revokeObjectURL(url);
};
newImg.src = url;
},
"image/jpeg",
1
);
// If you ever stumble at 18 DOM Exception, just use this code to fix it
// let dataUrl = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
let dataUrl = canvas.toDataURL("image/jpeg");
console.log("cek inside url : ", url);
if(url === backgroundImg) {
self.assignImageBase64Background(dataUrl);
} else {
self.assignImageBase64(dataUrl);
}
};
image.src = url;
},
assignImageBase64(img) {
this.imgBase64 = img;
},
仅供参考,我使用此库将div 更改为image 文件:
vue-html2canvas
注意事项:
如果你想知道为什么我最后给self.assignImageBase64(dataUrl);这个函数,这是因为我仍然想知道onload是如何工作的,以及如何将Base64 url返回给父级,所以我只是在另一个函数中再次分配它因为它更容易做到。