나는 내가 Base64, 좋은, 내가 그것을했다 ...캔버스
내 캔버스를 변환 할 필요가 있음을 발견 인터넷에서 읽고, 내 divice에 캔버스를 저장하기 위해 노력하고있어 그런 다음 cordova와 함께 base64를 저장하는 함수를 검색하여 Blob 객체를 저장하는 function을 찾았습니다. 다시 검색하여 Blob에 내 base64를 변환하는 function을 찾았습니다. 다시 멋지게 작동하지만, 내가 갈 때는 분명히 작동합니다. 파일 탐색기 그냥 일반 텍스트 (그리고 .txt 확장명을 변경하는 파일) 가져 오는 중입니다 :
[개체 Uint8Array] [개체 Uin8Array] t8Array]
이 내 마지막 코드입니다 : 나는 당신이 날 도울 수 있기를 바랍니다
function draw() {
window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) {
console.log('file system open: ' + fs.name);
getSampleFile(fs.root);
}, errorHandler);
}
function getSampleFile(dirEntry) {
var canvas = document.getElementById("mycanvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
//...some code to customize the canvas
//var mURI = canvas.toDataURL();
var mURI = canvas.toDataURL().replace(/data:image\/png;base64,/,'');
var x = Math.floor((Math.random() * 100000) + 1);
saveFile(dirEntry, b64toBlob(mURI,"image/png","512") , x+".png");
}
}
function b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
console.log('Estoy en B64');
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
console.log('ByteArrays'+byteArrays);
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
function saveFile(dirEntry, fileData, fileName) {
console.log('1. DIRENTRY:'+dirEntry+', 2 FILEDATA:'+fileData+',3 FILENAME:'+fileName);
dirEntry.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) {
writeFile(fileEntry, fileData);
}, errorHandler);
}
function writeFile(fileEntry, dataObj, isAppend) {
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function() {
console.log("Successful file write...");
};
fileWriter.onerror = function(e) {
console.log("Failed file write: " + e.toString());
};
fileWriter.write(dataObj);
});
}
, 이것의 주요 목표는 워터 마크와 함께 사진을 저장하는 것입니다, 그래서 당신이 다른 생각이 있으면 알려주세요 나, 감사
답변 @Charitha Goonewardena 주셔서 감사합니다,하지만 난 이미하고 있어요 ... 문제는 PNG 또는 JPEG 파일로 그 캔버스 요소를 저장하는 – user3891850
당신은 간단하게 변환 할 수 있습니다 캔버스를 base64 문자열로 변환합니다. 나는 나의 대답을 편집했다. 희망이 도움이됩니다. 아무것도 필요하지 않습니다.) 행운을 빌어 요. –
다시 한번 감사드립니다. @Charitha Goonewardena는 위의 코드에서, base64 문자열을 .jpg 또는 .png로 저장하는 함수입니다. cordova 문서에서 검색했지만 찾지 못했습니다. 당신이 나를 도울 수 있다면 그것은 매우 맞는 감사드립니다. – user3891850