Image to Canvas to Blob to ObjectURL using filesysem
Experiment to see how to get a file into the filesystem. Copies the first image into a canvas and then turns that canvas's data into a blob and then sets the third images src to the uri for the blob using fileentry.toURL which allows to set a file name. Only ever tested on Chrome. Works, but why so many hoops?
by PAEz
JavaScript
function convertDataURIToBinary(dataURI) {
var BASE64_MARKER = ';base64,';
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
if (
this.ArrayBuffer &&
this.Uint8Array &&
this.Uint32Array
) (function(win, doc, bdy, DATA_URI) {
var img = bdy.appendChild( new Image ),
cvs = bdy.appendChild( doc.createElement("canvas") ),
ctx = cvs.getContext("2d"),
size = cvs.width = cvs.height = "100";
img.onload = main;
img.src = DATA_URI;
/**
* ナビ子記法?
*/
function main() {
function errorHandler(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
function onInitFs(fs) {
fs.root.getFile('tester.png', {create: true}, function(fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function(e) {
console.log('Write completed.');
};
fileWriter.onerror = function(e) {
console.log('Write failed: ' + e.toString());
};
var imd = cvs.toDataURL("image/png");
var ui8a = convertDataURIToBinary(imd);
bb = new WebKitBlobBuilder();
bb.append(ui8a.buffer);
...