gpt4 book ai didi

javascript - 将 PNG Canvas 图像保存到 HTML5 存储(JavaScript)?

转载 作者:可可西里 更新时间:2023-11-01 02:35:23 25 4
gpt4 key购买 nike

我正在开发一个 chrome 扩展程序。

我在 Canvas 中打开一个图像文件,对其进行一些更改,然后尝试将其保存到 HTML5 文件系统 api。

首先,我从 Canvas 中获取数据 URL:

    var dataURL = canvas.toDataURL('image/png;base64'); 

然后是数据:

    var image64 = dataURL.replace(/data:image\/png;base64,/, '');

然后我制作一个 Blob。

    var bb = new BlobBuilder();
bb.append(image64);
var blob = bb.getBlob('image/png');

然后我用下面的函数onInitFs()请求文件系统;

    function onInitFs(fs) {
fs.root.getFile('image.png', {create: true}, function(fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
//WRITING THE BLOB TO FILE
fileWriter.write(blob);
}, errorHandler);
}, errorHandler);
}

window.requestFileSystem(window.PERSISTENT, 5*1024*1024, onInitFs, errorHandler);

这会导致将损坏的文件写入文件系统。

我不知道我还能做些什么来完成这项工作。

有人可以指导我正确的方向吗?

以下是我用来完成此任务的函数的一些来源。

http://dev.w3.org/html5/canvas-api/canvas-2d-api.html#todataurl-method

http://www.html5rocks.com/en/tutorials/file/filesystem/#toc-file-creatingempty

谢谢!

最佳答案

我发现了一个将数据 URL 转换为 blob 的函数。

当您需要将 Canvas 图像保存到沙盒文件系统时非常有用。适用于 Chrome 13。

function dataURItoBlob(dataURI, callback) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs
var byteString = atob(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 bb = new window.WebKitBlobBuilder(); // or just BlobBuilder() if not using Chrome
bb.append(ab);
return bb.getBlob(mimeString);
};

用法:

window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs){
fs.root.getFile("image.png", {create:true}, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.write(dataURItoBlob(myCanvas.toDataURL("image/png")));
}, errorHandler);
}, errorHandler);
}, errorHandler);

来源线索:

http://mustachified.com/master.js
通过http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-April/031243.html
通过https://bugs.webkit.org/show_bug.cgi?id=51652
通过http://code.google.com/p/chromium/issues/detail?id=67587

关于javascript - 将 PNG Canvas 图像保存到 HTML5 存储(JavaScript)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com