从HTML5 Canvas获取二进制(base64)数据(readAsBinaryString)

时间:2013-03-28 15:22:51

标签: javascript html5 html5-canvas fileapi

有没有办法将HTML Canvas的内容作为二进制数据读取?

目前我已经有了以下HTML来显示输入文件和它下面的画布:

<p><button id="myButton" type="button">Get Image Content</button></p>
<p>Input:<input id="fileInput" type="file"/></p>
<p>Canvas<canvas id="myCanvas" width="578" height="200"/></p>

然后我设置我的输入文件以正确设置画布,这可以正常工作:

$('#fileInput').on('change', function() {
    $.each(this.files, function() {
        var image = new Image();
            image.src = window.URL.createObjectURL(this);

        image.onload = function() {
            $("canvas").drawImage({
                source: image,
                x: 50, y: 50,
                width: 100,
                fromCenter: false
            });
        };
    });
});

我现在需要在单击按钮时从Canvas获取二进制数据(Base64编码),以便将数据推送到服务器......

最终结果是我需要为用户提供选择文件,裁剪/调整大小,然后单击按钮的功能,此时编辑后的图像将上传到服务器(我无法做到)服务器端裁剪/调整大小由于服务器端限制...)

任何帮助都会很棒!干杯

3 个答案:

答案 0 :(得分:130)

canvas元素提供toDataURL方法,该方法返回data:网址,其中包含给定格式的base64编码图像数据。例如:

var jpegUrl = canvas.toDataURL("image/jpeg");
var pngUrl = canvas.toDataURL(); // PNG is the default

虽然返回值不是只是 base64编码的二进制数据,但是修剪方案和文件类型以获得所需的数据是一件简单的事情。

如果浏览器认为你已经从画布中抽取了从不同来源加载的任何数据,那么toDataURL方法将会失败,因此这种方法只有在你的图像文件从同一服务器上加载时才会起作用。脚本执行此操作的HTML页面。

有关详细信息,请参阅the MDN docs on the canvas API,其中包含有关toDataURLthe Wikipedia article on the data: URI scheme的详细信息,其中包含有关您通过此次调用收到的URI格式的详细信息。

答案 1 :(得分:6)

简短答案:

const base64Canvas = canvas.toDataURL("image/jpeg").split(';base64,')[1];

答案 2 :(得分:0)

了解如何使用

绘制画布

$("canvas").drawImage();

您似乎使用了Caleb Evans的jQuery Canvas(jCanvas)。 我实际上使用该插件,它有一个简单的方法来检索带有$('canvas').getCanvasImage();

的canvas base64图像字符串

这是一个适合您的小提琴:http://jsfiddle.net/e6nqzxpn/