我正在开发一个在 HTML Canvas 上生成图像的项目,然后提供以 PNG 格式下载图像。
该程序必须是客户端(javascript)。
我可以使用将画布转换为图像
var canvas=document.getElementById('canvas');
var img = canvas.toDataURL("image/png;base64");
应该下载图片的代码是:
var container = document.querySelector('#container2');
//container2 is a div in HTML
var output = container.querySelector('output');
//output is inside container2
window.URL = window.webkitURL || window.URL;
var prevLink = output.querySelector('a');
if (prevLink) {
window.URL.revokeObjectURL(prevLink.href);
output.innerHTML = '';}
//removes the download link if already there
var bb = new Blob([img], {data: "image/png;base64"});
//creates new blob from the img variable
var a = document.createElement('a');
a.download = 'test' + '.png';
//file name
a.href = window.URL.createObjectURL(bb);
//create URL from blob
a.textContent = 'Click here for download';
a.dataset.downloadurl = ["image/png;base64", a.download, a.href].join(':');
output.appendChild(a);
如果 blob 变量是文本字符串而不是“img”变量,则此方法非常有效。我得到的不是图像,而是损坏的 .png 文件,在记事本中打开该文件会给出data:image/png;base64,iVBORw0KGgoAAAANSUhEU...(long string of base64 letters),这是正确的字符串,但显然不适合 PNG图片。但如果我写
document.write('<img src="'+img+'"/>');
图像在新选项卡中正确打开。
如何使下载的图像不损坏?
( Canvas2image生成的数据似乎无法下载)