window.resolveLocalFileSystemURL(my_Directory_Path,
function (dirEntry) {
dirEntry.getFile(path_Of_File_To_Be_Written, { create: true },
// getFile() success
function (fileEntry) {
fileEntry.createWriter(
// createWriter() success
function (fileWriter) {
fileWriter.onwriteend = function (e) {
. . .
};
fileWriter.onerror = function (e) {
. . .
};
fileWriter.write(dataURIToBlob(getBase64Image(image_To_Be_Written, "image/jpeg")));
// or if we already have a canvas
//fileWriter.write(dataURIToBlob(canvas.toDataURL("image/jpeg")));
},
// createWriter() error
function (error) {
. . .
}
);
},
// getFile() error
function (error) {
. . .
}
);
});
A function to convert an image's base-64 encoded data to Blob type (this is taken from http://stackoverflow.com/questions/12391628/how-can-i-upload-an-embedded-image-with-javascript):
function dataURIToBlob(dataURI) {
// serialize the base64/URLEncoded data
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0) {
byteString = atob(dataURI.split(',')[1]);
}
else {
byteString = unescape(dataURI.split(',')[1]);
}
// parse the mime type
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
// construct a Blob of the image data
var array = [];
for (var i = 0; i < byteString.length; i++) {
array.push(byteString.charCodeAt(i));
}
return new Blob(
[new Uint8Array(array)],
{ type: mimeString }
);
}
Also a function to get base-64 encoded data from an image:
// type is either "image/png" or "image/jpeg"
function getBase64Image(img, type) {
// create an empty canvas element
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
// copy the image contents to the canvas
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
// get the base-64 encoded data
var dataURL = canvas.toDataURL(type);
// toDataURL() actually has two optional parameters:
// - type. The default value is 'image/png'.
// - jpegQuality. A decimal value ranging from 0 to 1 to determine the quality of the data to be generated from a jpeg type image.
// The default value is browser dependant.
return dataURL;
}

No comments:
Post a Comment