需要将画布图像转换为base64,然后从base64转换为二进制。使用.toDataURL()
和dataURItoBlob()
实现此操作。
这是一个相当棘手的过程,需要将几个SO答案、各种博客文章和教程拼凑在一起。
我创建了一个教程,带您完成整个过程。
针对Ateik的评论,这里有一个示例,可以复制原始帖子,以防您无法查看原始链接。您还可以在此处fork我的项目。
代码很多,但我正在做的核心是获取画布元素:
<canvas id="flatten" width="800" height="600"></canvas>
将其上下文设置为2D
var snap = document.getElementById('flatten');
var flatten = snap.getContext('2d');
Canvas => Base64 => Binary
function postCanvasToURL() {
var img = snap.toDataURL();
var file = dataURItoBlob(img);
}
function dataURItoBlob(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,则可以停在那里,而在我的情况下,我需要再次转换为二进制,以便我可以传递数据到 Twitter(使用 OAuth)而无需使用数据库。结果发现,您可以在 Twitter 上发布二进制文件,这非常酷,Twitter 会将其转换回图像。
canvas.toBlob()
:将 canvas 元素中的内容转换为 Blob(二进制大对象) 对象。了解更多请访问 https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toBlob - Ray Nicholus