var type = 'png';
var canvas = document.createElement('canvas');
var imgData = canvas.toDataURL(type);
var _fixType = function(type) {
type = type.toLowerCase().replace(/jpg/i, 'jpeg');
var r = type.match(/png|jpeg|bmp|gif/)[0];
return 'image/' + r;
};
imgData = imgData.replace(_fixType(type), 'image/octet-stream');
var saveFile = function(data, filename) {
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
save_link.href = data;
save_link.download = filename;
var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
save_link.dispatchEvent(event);
};
var filename = 'weiyin_' + (new Date()).getTime() + '.' + type;
saveFile(imgData, filename);
为什么我最后下载出来的png是空白的呢
你把
这句放在获取
_fixType
后面,并传一个_fixType
进去再试试这句代码的意思,新创建一个空白canvas元素,所以后面获取到的base64图片也应该是空白的。所以最后就获取了空白了的图片
其实这个问题出现在var canvas = document.createElement('canvas');这句上面,获取是为空,所以换了 var canvas = document.getElementById('canvas')就可以了
完整demo:
请输入代码
亲测上面demo在手机端图片是下载不下来的,保存到手机预览也是有问题的,只在pc端有效。
如果要兼容移动端建议你可以用html2canvas.js
将p里的内容转为canvas,再将canvas转为img非常方便。