在与Cordova使用相机之后,会收到iOS内存警告
当我拍照时,我开始不断地收到记忆警告。 我使用cordova3.5和相机插件与这些设置。
var _config; var pictureSource; var destinationType; // sets the format of returned value. var encodingType; // enconding type 0=JPG 1=PNG /** * Initialize camera plugin. * @param {object} config - settings. */ function initialize(config) { alert("CAMERA is comming!!"); // Wait for Cordova to connect with the device document.addEventListener('deviceready', onDeviceReady, false); } /** * Cordova is ready to be used! * @param {object} config - settings. */ function onDeviceReady() { console.log("CAMERA is READY!!"); pictureSource=navigator.camera.PictureSourceType; destinationType=navigator.camera.DestinationType; encodingType = navigator.camera.EncodingType; capturePhoto(); } /** * Set camera plugin settings. * @param {object} config - settings. */ function setConfig(config) { _config = config; } /** * Take picture using device camera and retrieve image as base64-encoded string. */ function capturePhoto() { setConfig({ quality: 20, destinationType: destinationType.DATA_URL, encodingType: 0}); navigator.camera.getPicture(onPhotoDataSuccess, onFail, _config); } /** * Photo is successfully retrieved. * @callback getPicture~onPhotoDataSuccess * @param {string} imageData - A base64-encoded image. */ function onPhotoDataSuccess(imageData) { //Edit photo }
我确定质量是低的,但它会变慢,直到它崩溃。
感谢所有的帮助!
最后,我通过修复照片尺寸来解决问题:
/** * Take a picture and get the image as base64-encoded string. */ function capturePhoto() { setConfig({ quality: 20, targetWidth: 600, targetHeight: 600, correctOrientation: true, destinationType: destinationType.DATA_URL, encodingType: 0}); navigator.camera.getPicture(onPhotoDataSuccess, onFail, _config); }
DATA_URL将图像作为数据stream返回。 现代的,高分辨率的相机只是重载JavaScript引擎,因为string值的大小被返回到程序。 从我的Apache Cordova API食谱:
“使用Camera.DestinationType.DATA_URL存在问题,摄像机图像包含大量数据,将图像转换为string并将其传递给Cordova应用程序,以超出大多数任何设备的JavaScript引擎的限制。调低图像的质量或大小,当使用此选项时,您很可能会发现应用程序非常慢或崩溃。
build议使用FILE_URI,否则,除非拍摄非常小的照片,否则将无法使用DATA_URL。