该篇主要讲述cordova如何调用相机。


1、Cordova调用相机的api
Cordova框架提供了两个用于访问设备相机的API,一个是Camera API,它使用开发者能直接访问本地相机的API,另一个是Media Capture API
两者区别:Camera API只用相机获取图像,而Media Capture API不仅能获取图像,还可以录视频或者录音


2、安装插件

cordova plugin add cordova-plugin-camera

3、调用方法

var cameraOptions= {
    quality : 75,
    destinationType : Camera.DestinationType.DATA_URL,
    sourceType : Camera.PictureSourceType.CAMERA,
    allowEdit : true,
    encodingType : Camera.EncodingType.JPEG,
    targetWdith : 100,
    targetHeight : 100,
    popoverOptions : CameraPopoverOptions,
    saveToPhotoAlbum : false
};

navigator.camera.getPicture(onCameraSuccess, onCameraError, cameraOptions);

function onCameraSuccess(imageURI){   
   $('#img_pic').attr("src","data:image/jpeg;base64," + imageURI);
}

function onCameraError(message) {
  alert('Failed because: ' + message);
}

4、官方参数列表

属性

描述

allowEdit

布尔值,照片在返回Cordova应用之前用户是否可以编辑,但并不是所有移动平台都支持。

cameraDirection

数值型,规定使用前面或后面的相机。navigator.camera.Direction.FRONTnavigator.camera.Direction.BACK分别指前面和后面。

correctOrientation

布尔值,告诉API在拍照时旋转图像来调整设备方向。

destinationType

布尔值,照片在返回Cordova应用之前用户是否可以编辑,但并不是所有移动平台都支持。

cameraDirection

数值型,规定API怎样返回照片。Camera.DestinationType.FILE_URI是默认选项前边提到过,Camera.DestinationType.DATA_URL,返回用base-64编码的图像,Camera.DestinationType.NATIVE_URI, 返回图像的本地的URI。注意使用DATA_URL,因为js不处理用字符编码的图像,可能会使用js应用崩溃。

encodingType

数值型,指明图像输出格式。Camera.EncodingType.JPEG让API返回JPEG图像。

mediaType

数值型,当SoruceType设置为PHOTOLIBRARYSAVEDPHOTOALBUM,规定了用户可选择什么类型的文件。使用Camera.MediaType.PICTURE时只允许选择图像,Camera.MediaType.VIDEO允许选择视频文件,Camera.MediaType.ALLMEDIA允许选择任何支持的媒体文件。选择VIDEO时,API只返回文件的URI;如果是图像会返回信息,它的格式请参考destinationType

quality

数值型,用从0到100%的百分比来控制图像的质量,100表示不经过压缩。

saveToPhotoAlbum

布尔值,指示API在拍照后把图像保存到设备照片相册中。

sourceType

数值型,指明图像来源。可能值有Camera.PictureSourceType.CAMERA(默认值),或者Camera.PictureSourceType.PHOTOLIBRARYCamera.PictureSourceType.SAVEDPHOTOALBUM。选项的行为会根据应用运行的平台不同而不同,像有些平台没有photo librariesphoto albums

targetHeight

数值型,用来设定获得的图像的高度。

targetWidth

数值型,用来设定获得的图像的宽。


5、注意
用户在返回给Cordova应用的是一张图像,但可能拍了不止一张。Cordova有一个cleanup方法用来清理这种图像。调用这个方法并且传入成功和失败的回调函数名作为参数,如下:

navigator.camera.cleanup(onCameraCleanupSuccess, onCameraCleanupError);

调用手机相机,除了用cordova调取,我们还可以用HTML5的api.