Rob*_*Rob 10 javascript filesystems blob canvas filewriter
我正在开发一个chrome扩展.
我在画布中打开一个图像文件,我对它应用了一些更改,然后我试图将它保存到HTML5文件系统API.
首先,我从画布中获取dataURL:
var dataURL = canvas.toDataURL('image/png;base64');
Run Code Online (Sandbox Code Playgroud)
然后只是数据:
var image64 = dataURL.replace(/data:image\/png;base64,/, '');
Run Code Online (Sandbox Code Playgroud)
然后我做一个Blob.
var bb = new BlobBuilder();
bb.append(image64);
var blob = bb.getBlob('image/png');
Run Code Online (Sandbox Code Playgroud)
然后我使用以下函数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);
Run Code Online (Sandbox Code Playgroud)
这会导致将损坏的文件写入文件系统.
我不知道我还能做些什么来完成这项工作.
有人可以指导我朝正确的方向发展.
以下是我用来完成此任务的函数的一些来源.
http://dev.w3.org/html5/canvas-api/canvas-2d-api.html#todataurl-method
http://www.html5rocks.com/en/tutorials/file/filesystem/#toc-file-creatingempty
谢谢!
Chr*_*and 10
我找到了一个将数据URL转换为blob的函数.
非常适合在需要将画布图像保存到沙盒文件系统时.适用于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);
};
Run Code Online (Sandbox Code Playgroud)
用法:
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);
Run Code Online (Sandbox Code Playgroud)
来源追踪:
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
现在有一个canvas.toBlob()polyfill:https://github.com/eligrey/canvas-toBlob.js
其他有趣的链接:https://github.com/eligrey/BlobBuilder.js
因此,使用这些可以很容易地从画布保存图像:
<script type="text/javascript" src="https://raw.github.com/eligrey/BlobBuilder.js/master/BlobBuilder.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/eligrey/canvas-toBlob.js/master/canvas-toBlob.min.js"></script>
...
canvas.toBlob(function(blob) {
fileWriter.write(blob);
}, "image/png");
Run Code Online (Sandbox Code Playgroud)
以下是使用FileSaver的一个小例子:http://jsfiddle.net/JR5XE/
| 归档时间: |
|
| 查看次数: |
15985 次 |
| 最近记录: |