Javascript 将摄像头捕获图像转换为base64-Ionic
我已经按照这个fiddler示例图像到Base64。当我使用“直接图像路径”链接时,它工作正常,但当我传递相机图像时,它失败了Javascript 将摄像头捕获图像转换为base64-Ionic,javascript,cordova,camera,ionic-framework,base64,Javascript,Cordova,Camera,Ionic Framework,Base64,我已经按照这个fiddler示例图像到Base64。当我使用“直接图像路径”链接时,它工作正常,但当我传递相机图像时,它失败了 Camera.getPicture().then(function(imageURI) { var imageUrl = "http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png"; convertImgToDataURLviaCanvas(imageU
Camera.getPicture().then(function(imageURI) {
var imageUrl = "http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png";
convertImgToDataURLviaCanvas(imageUrl, function(base64Img) {
alert(base64Img);
});
var result = convertImgToDataURLviaCanvas(imageURI);
}, function(err) {
alert(err);
}, {
quality: 75,
targetWidth: 320,
targetHeight: 320,
pictureSource: navigator.camera.PictureSourceType.PHOTOLIBRARY,
destinationType: navigator.camera.DestinationType.FILE_URI,
saveToPhotoAlbum: true
});
function convertImgToDataURLviaCanvas(url, callback, outputFormat) {
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
alert(dataURL + "GANESH" + outputFormat);
callback(dataURL);
alert('5');
canvas = null;
};
img.src = url;
}
在这里,如果我给图像的直接路径,它工作,但它不工作,当我使用相机图像。帮帮我,伙计们。。提前感谢。无需编写自己的base64转换器。一旦您设置属性
Camera.DestinationType.DATA\u URL
destinationType : Camera.DestinationType.DATA_URL
设置属性后,Camera.getPicture()
现在将返回照片的base64
版本
Camera.getPicture().then(function(imageURI) {
console.log(imageURI) //base64 photo
});
虽然我同意使用数据URL是最简单的答案,但它确实有一个主要缺点。爱奥尼亚相机所基于的: 数据URL可能占用大量内存,导致应用程序崩溃或内存不足错误。如果可能,请使用文件URI或本机URI 基本上,在RAM较低(或后台内存使用率较高)的手机上,您的应用程序有可能在垃圾收集过程中被杀死并重新启动,因为当本机摄像头打开时,从技术上讲,它处于后台(暂停) 然而,避免使用数据URL更是一个难题,因为其他数据源仍然容易受到相同问题的影响,尽管由于内存使用率较低,这种影响较小。关于Android生命周期的cordova文档提供了有关该问题的更多详细信息: 问题(可能)在于线路:
img.crossOrigin = 'Anonymous';
说明方法toDataUrl()
在“受污染的画布”上不起作用。当您将crossOrigin
设置为“匿名”时,画布会受到污染
我还没有测试过这个理论。读吧 谢谢你的回复。所以我不想使用ConvertImgTodaTauralViacanvas函数?@ganesh是的,确实如此,这样做没有意义,因为当且仅当您设置destinationType:Camera.destinationType.DATA\Url时,摄像头插件将为您返回base64字符串。您知道如何将数据\u Url转换为文件吗?因为我想和你一起寄XMLHttpRequest@MissakBoyajian使用
Camera.DestinationType.FILE_URI
或Camera.DestinationType.NATIVE_URI