Javascript 如何将HTML5画布输出为图像?

Javascript 如何将HTML5画布输出为图像?,javascript,html,Javascript,Html,我已经研究过如何在HTML5中使用画布创建剪辑遮罩的本教程。 我现在的问题是,是否可以将画布保存为图像(包括遮罩效果) 谢谢 是给你一个可以放进图像标签的。从那里你可以保存它 如果您希望自动将其保存到硬盘,那么在标准JavaScript中是不可能的 是给你一个可以放进图像标签的。从那里你可以保存它 如果您希望自动将其保存到硬盘驱动器,则在标准JavaScript中无法实现这一点。可以使用canvas.toDataURL()获得PNG输出 也可以在Chrome/Firefox上获得JPEG输出。

我已经研究过如何在HTML5中使用画布创建剪辑遮罩的本教程。

我现在的问题是,是否可以将画布保存为图像(包括遮罩效果)

谢谢

是给你一个可以放进图像标签的。从那里你可以保存它

如果您希望自动将其保存到硬盘,那么在标准JavaScript中是不可能的

是给你一个可以放进图像标签的。从那里你可以保存它


如果您希望自动将其保存到硬盘驱动器,则在标准JavaScript中无法实现这一点。

可以使用
canvas.toDataURL()
获得PNG输出

也可以在Chrome/Firefox上获得JPEG输出。下面是将JPEG数据转换为HTML5 Blob的代码

   /**
    * http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata/5100158
    *
    *
    */
    function dataURItoBlob(dataURI, callback) {
        // convert base64 to raw binary data held in a string
        // doesn't handle URLEncoded DataURIs

        var byteString;
        if (dataURI.split(',')[0].indexOf('base64') >= 0) {
            byteString = atob(dataURI.split(',')[1]);
        } else {
            byteString = unescape(dataURI.split(',')[1]);
        }

        // separate out the mime component
        var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

        // write the bytes of the string to an ArrayBuffer
        var ab = new ArrayBuffer(byteString.length);
        var ia = new Uint8Array(ab);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }

        // write the ArrayBuffer to a blob, and you're done
        var BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder;
        var bb = new BlobBuilder();
        bb.append(ab);
        return bb.getBlob(mimeString);
    }

   function getAsJPEGBlob(canvas) {
        if(canvas.mozGetAsFile) {
            return canvas.mozGetAsFile("foo.jpg", "image/jpeg");
        } else {
            var data = canvas.toDataURL('image/jpeg', 0.7);
            var blob = dataURItoBlob(data);
            return blob;
        }
    }
/**
* http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata/5100158
*
*
*/
函数dataURItoBlob(dataURI,回调){
//将base64转换为字符串中的原始二进制数据
//不处理URL编码的数据URI
var-byteString;
if(dataURI.split(',')[0].indexOf('base64')>=0){
byteString=atob(dataURI.split(',)[1]);
}否则{
byteString=unescape(dataURI.split(',)[1]);
}
//分离出mime组件
var mimeString=dataURI.split(',')[0]。split(':')[1]。split(';')[0];
//将字符串的字节写入ArrayBuffer
var ab=新阵列缓冲区(byteString.length);
var ia=新的UINT8阵列(ab);
for(var i=0;i
获取PNG输出可以通过
canvas.toDataURL()
完成

也可以在Chrome/Firefox上获得JPEG输出。下面是将JPEG数据转换为HTML5 Blob的代码

   /**
    * http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata/5100158
    *
    *
    */
    function dataURItoBlob(dataURI, callback) {
        // convert base64 to raw binary data held in a string
        // doesn't handle URLEncoded DataURIs

        var byteString;
        if (dataURI.split(',')[0].indexOf('base64') >= 0) {
            byteString = atob(dataURI.split(',')[1]);
        } else {
            byteString = unescape(dataURI.split(',')[1]);
        }

        // separate out the mime component
        var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

        // write the bytes of the string to an ArrayBuffer
        var ab = new ArrayBuffer(byteString.length);
        var ia = new Uint8Array(ab);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }

        // write the ArrayBuffer to a blob, and you're done
        var BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder;
        var bb = new BlobBuilder();
        bb.append(ab);
        return bb.getBlob(mimeString);
    }

   function getAsJPEGBlob(canvas) {
        if(canvas.mozGetAsFile) {
            return canvas.mozGetAsFile("foo.jpg", "image/jpeg");
        } else {
            var data = canvas.toDataURL('image/jpeg', 0.7);
            var blob = dataURItoBlob(data);
            return blob;
        }
    }
/**
* http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata/5100158
*
*
*/
函数dataURItoBlob(dataURI,回调){
//将base64转换为字符串中的原始二进制数据
//不处理URL编码的数据URI
var-byteString;
if(dataURI.split(',')[0].indexOf('base64')>=0){
byteString=atob(dataURI.split(',)[1]);
}否则{
byteString=unescape(dataURI.split(',)[1]);
}
//分离出mime组件
var mimeString=dataURI.split(',')[0]。split(':')[1]。split(';')[0];
//将字符串的字节写入ArrayBuffer
var ab=新阵列缓冲区(byteString.length);
var ia=新的UINT8阵列(ab);
for(var i=0;i
可能重复的是您想将映像保存在服务器上还是客户端上?基本上我想将其保存在服务器上可能重复的是您想将映像保存在服务器上还是客户端上?基本上我想将其保存在服务器上进一步的源代码可以在此处找到,您可以添加“| | window.MSBlobBuilder”以支持IE。进一步源代码可以在这里找到。您可以添加`| | window.MSBlobBuilder`来支持IE。无论如何,看起来我们最终会在浏览器中看到文件编写API。@MattGreer:这似乎是一个非常糟糕的主意,安全性方面。@谢天谢地,我不是做这些决定的人:)幸运的是,我只需要将它保存在服务器上。无论如何,看起来我们最终会在浏览器中看到文件编写API。@MattGreer:这似乎是一个非常糟糕的主意,安全方面。@谢天谢地,我不是做这些决定的人:)幸运的是,我只需要将它保存在服务器上