2013-08-29 142 views
1

我想在此问你一些问题。在android中将文件写入SD卡作为图像文件

我使用PhoneGap的建立可以拍照,然后显示在画布canvas.After的drawImage图片的应用程序,我用一种方法来画布转换为图像文件。但是我有一个问题涉及将文件作为图像文件写入Android的SD卡,即我无法读取在SD卡中创建的图像文件(图像无效)。

这里是我的代码:

var picture = ""; 
function takePhoto() { 
    navigator.camera.getPicture(onCameraSuccess, 
    onCameraError,{ 
     quality : 50, 
     destinationType : Camera.DestinationType.FILE_URI 
     //saveToPhotoAlbum: true 
     }); 
} 

function onCameraSuccess(imageURL) { 
    var canvas = document.getElementById('myCanvas');  
    var ctx=canvas.getContext("2d"); 
    var imageObj = new Image(); 
    imageObj.onload = function() { 
    ctx.drawImage(imageObj, 0, 0,220,180); 
    }; 
    imageObj.src=imageURL; 
    picture = imageURL; 

} 
function onCameraError(e) { 
    console.log(e); 
    navigator.notification.alert("onCameraError: " + e +" (" + e.code + ")"); 
} 

function storePhoto() {     
    movePic(pictures); 
} 

function movePic(){ 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
} 

function gotFS(fileSystem) {   
    fileSystem.root.getFile("test.PNG", {create: true, exclusive: false}, gotFileEntry, fail); 
} 

function gotFileEntry(fileEntry) { 
    fileEntry.createWriter(gotFileWriter, fail); 
} 

function gotFileWriter(writer) {  
    var c = document.getElementById('myCanvas');  
    var img_from_canvas=c.toDataURL("image/png"); // base64 encoded 
    var pic = img_from_canvas.split("base64,"); 
    var pictures =window.atob(pic[1]);   // decode base64 
    writer.write(pictures); 
    alert("Your picture was successfully stored !") 
} 

function fail(error) { 
    console.log(error.code); 
} 

我感谢你的帮助和建议。

+0

你是否在通过画布捕获后对图像进行任何类型的编辑? – amorbytes

回答

0

你在做任何形式的由帆布捕获后编辑图像的? 如果没有,那么你可以试试这个代码移动文件的根文件夹

var fs; 

function movePic(){ 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
} 

function gotFS(fileSystem) {   
    fs = fileSystem; 
    window.resolveLocalFileSystemURI(picture, gotFileEntry, fail); 
} 

function gotFileEntry(fileEntry) { 
    fileEntry.moveTo(fs.root,fileEntry.name, success, fail); 
} 

function fail(error) { 
    console.log(error.code); 
} 
+0

我尝试做,但我得到了错误代码:5与此代码window.resolveLocalFileSystemURI(图片,gotFileEntry,失败); 我认为,“图片”是我的图片的路径,但我的形象是“的base64”编码。 – Sokly

+0

我必须编辑画布图片,然后使用该帆布保存到图像:canvas.toDataURL(“图像/ PNG”); 所以我从画布上获得了base64代码。 – Sokly

+0

我无法帮助您保存画布编辑过的图片。和'“图片”'应该和'你可以在函数''onCameraSuccess“'中得到的参数'”imageURL“'相同。 – amorbytes

0

您有writer.write(图片)的问题;

试试这个

var buffer = new ArrayBuffer(pictures.length); 
var array = new Uint8Array(buffer); 
    for (var i = 0; i < pictures.length; i++) { 
      array[i] = pictures.charCodeAt(i); 
     } 
writer.write(buffer); 

它为我工作。