使用cordova,使html5也能像IOS,Android那样可以 调取手机的相机拍照功能
一,我们在使用html5的技术开发手机app时,并不能像IOS,Android那样可以调取手机原生的相机功能,这是我们就要借助一些插件来时实现。
二,安装Cordoba的相机插件
1、在文件目录下,使用命令安装相机插件,命令如下:
cordova plugin add cordova-plugin-camera
2、使用”camera.getPicture“函数来调取相机
camera.getPicture(successCallback, errorCallback, options)
successCallback相机调取成功的回调函数。
errorCallback相机调取失败的回调函数。
options:相机参数设置。参数如下表:
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
| 质量 | number |
50 |
保存的图像的质量,表示为0-100的范围,其中100通常是全分辨率,没有文件压缩损失。(请注意,关于相机分辨率的信息不可用。) |
| destinationType | DestinationType |
FILE_URI |
选择返回值的格式。 |
| sourceType的 | PictureSourceType |
CAMERA |
设置图片的来源。 |
| allowEdit | Boolean |
true |
选择前允许简单编辑图像。 |
| 编码类型 | EncodingType |
JPEG |
选择返回的图像文件的编码。 |
| targetWidth | number |
以像素为单位的缩放图像的宽度 必须与...一起使用targetHeight。长宽比保持不变。 |
|
| targetHeight | number |
以像素为单位的高度缩放图像。必须与...一起使用targetWidth。长宽比保持不变。 |
|
| 媒体类型 | MediaType |
PICTURE |
设置要从中选择的媒体类型。只有当作品PictureSourceType是PHOTOLIBRARY或者SAVEDPHOTOALBUM。 |
| correctOrientation | Boolean |
捕捉期间旋转图像以纠正设备的方向。 | |
| saveToPhotoAlbum | Boolean |
捕获后将图像保存到设备上的相册中。 | |
| popoverOptions | CameraPopoverOptions |
指定iPad中弹出位置的仅iOS选项。 | |
| cameraDirection | Direction |
BACK |
选择要使用的相机(正面或背面)。 |
相机参数配置属性如下:
Camera.DestinationType (文件类型):属性值如下,
| Name | Type | Default | Description |
|---|---|---|---|
| DATA_URL | number |
0 |
返回base64编码的字符串。数据URL可能会占用大量内存,导致应用程序崩溃或内存不足错误。如果可能,请使用FILEURI或NATIVE_URI |
| FILE_URI | number |
1 |
返回文件uri(内容:// media / external / images / media / 2 for Android) |
| NATIVE_URI | number |
2 |
返回本地uri(例如,asset-library://... for iOS) |
Camera.EncodingType (图片类型设置): 属性值如下,
| Name | Type | Default | Description |
|---|---|---|---|
| JPEG | number |
0 |
返回JPEG编码的图像 |
| PNG | number |
1 |
返回PNG编码的图像 |
Camera.MediaType(媒体类型设置) : 属性值如下,
| Name | Type | Default | Description |
|---|---|---|---|
| PICTURE | number |
0 |
只允许选择静止图像。默认。将返回通过DestinationType指定的格式 |
| VIDEO | number |
1 |
只允许选择视频,只返回网址 |
| ALLMEDIA | number |
2 |
允许从所有媒体类型中选择 |
Camera.PictureSourceType (图片来源设置): 属性值如下,
| Name | Type | Default | Description | |
|---|---|---|---|---|
| PHOTOLIBRARY | number |
0 |
从图片库中选择图片(与Android的SAVEDPHOTOALBUM相同) | |
| CAMERA | number |
1 |
从相机拍照 | |
| SAVEDPHOTOALBUM | number |
2 |
|
Camera.PopoverArrowDirection(匹配iOS UIPopoverArrowDirection常量以指定弹出窗口上的箭头位置。) : 属性值如下,
| Name | Type | Default |
|---|---|---|
| ARROW_UP | number |
1 |
| ARROW_DOWN | number |
2 |
| ARROW_LEFT | number |
4 |
| ARROW_RIGHT | number |
8 |
| ARROW_ANY | number |
15 |
Camera.Direction (相机摄像头设置): 属性值如下,
| Name | Type | Default | Description |
|---|---|---|---|
| BACK | number |
0 |
使用背面照相机 |
| FRONT | number |
1 |
使用前置摄像头 |
例子:
// 打开相机
openCamera: function (selection) {
var srcType = Camera.PictureSourceType.CAMERA; // 只能从相机里取
var cameraOptions = uploadCtrl.setOptions(srcType); // 配置参数函数
navigator.camera.getPicture(uploadCtrl.cameraSuccess, uploadCtrl.cameraError, cameraOptions);
},
// 从相册获取图片
openFilePicker(selection){
var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
var pickerOptions = uploadCtrl.setOptions(srcType);
navigator.camera.getPicture(uploadCtrl.cameraSuccess, uploadCtrl.cameraError, pickerOptions);
},
// 相机调取成功成功
cameraSuccess(imageUri){
// console.log('调取成功')
uploadCtrl.createImg(imageUri);
},
// 相机调取失败
cameraError(error){
$$('.page[data-page="upload"] .imgUpload-overlay').removeClass('imgUpload-overlay-active'); // 选择器打开,遮罩层打开
var obj =$$('.page[data-page="upload"]').find('.'+uploadCtrl.imgType);
var index = uploadCtrl.imgType.substr(4);
uploadCtrl.uploadTypeCondition[index].hasImg = false;
obj.find('.img-item').removeClass('no'); // 上传模块隐藏
obj.find('.has-img').addClass('no');
if(error !=='Camera cancelled.' && error !=='no image selected' && error !=='Selection cancelled.'){ // 相机取消
myApp.alert('<span class="alertTip">'+error+'</span>',['']);
}
},
// 相机参数配置
setOptions(srcType){
var options = {
quality: 60,
destinationType: Camera.DestinationType.FILE_URI,//图片的base64编码
sourceType: srcType,
encodingType: Camera.EncodingType.jpg,
mediaType: Camera.MediaType.PICTURE,
allowEdit: false,
correctOrientation: true, //Corrects Android orientation quirks
saveToPhotoAlbum:false, // 不允许保存
};
return options;
},
使用cordova,使html5也能像IOS,Android那样可以 调取手机的相机拍照功能的更多相关文章
- Cordova or Xamarin 用.net开发IOS和Android程序
Visual Studio 2015 和 Apache Cordova 在开始前,问一下自己下面这些问题: 熟练掌握web技术的开发者比例是多少?(占所有开发者的比例) 熟练掌握移动开发技术(并且使用 ...
- 使HTML5支持RTSP流 微信直播RTSP流 微信播放RTSP直播流(HTML5播放rtsp,web播放rtsp,微信支持rtsp)
一.大家都知道HTML5的VIDEO可以播放视频,但是H5不支持RTSP播放,所以需要中间件! 二.我们经理长年的努力,开发了HTML5支持RTSP的中间件,使HTML5支持RTSP直播! 三.不卡顿 ...
- 在Ubuntu平台上创建Cordova Camera HTML5应用
在这篇文章中,我们将具体介绍怎样使用Cordova Camera HTML5 应用.很多其它关于Cordova的开发指南,开发人员能够參考文章"the Cordova Guide" ...
- LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android
LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...
- cordova程序加载pdf文件的2种方法(ios/android)
前言 公司目前的前端架构是微信端由vue全家桶负责h5网站的单页应用,android端和ios端则选择cordova打包成apk和app.其中,有一个业务逻辑是点击某个链接进入pdf的展示,h5的方案 ...
- 【转】从开发者的角度看待各移动平台 ios/android/wp7/win8ost title
T_T 这伪技术博客都快给写成Tron的读书笔记专栏了,这样可不行欸~ 如今正是移动平台的战国时期,厌烦了去讨论移动平台的未来,也无意于在HTML5和Native App之间纠结.本文只从开发者纯技术 ...
- Ionic中使用Chart.js进行图表展示以及在iOS/Android中的性能差异
Angular Chart 简介 在之前的文章中介绍了使用 Ionic 开发跨平台(iOS & Android)应用中遇到的一些问题的解决方案. 在更新0.1.3版本的过程中遇到了需要使用图表 ...
- iOS/Android 浏览器(h5)及微信中唤起本地APP
在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...
- fir.im Weekly - iOS/Android 应用程序架构解析
假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于 iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...
随机推荐
- spring 获取url参数
1. usl格式: http://localhost:8080/contact/delete/3 java代码 @RequestMapping(value="/delete/{id}&quo ...
- mac终端命令--常用快捷键
Ctrl + c 取消当前行输入的命令,进入下一行.或者中止一个错误的或者发疯的命令 Ctrl + a 光标移动到行首(Ahead of line),相当于通常的Home ...
- 每天一个linux命令:cp(8)
cp cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时, ...
- UNP学习第四章tcp
一.TCP简单流程图 因为对于server我已经写过一篇笔记了:http://www.cnblogs.com/ch122633/p/8315883.html 所以我想再补充一些对于client的部分的 ...
- delphi 判断WIN8 , WIN8.1 , WIN10 系统版本
今天测试了WIN8, WIN8.1, WIN10 系统下GetVersionEx 函数,居然取出来的版本都是6.2 . 于是网上查找各种获取内核版本号的方法, 终于找到几种有用的方法, 记录下来以作备 ...
- SLA(服务等级协议)
SLA:Service-Level Agreement的缩写,意思是服务等级协议.是关于网络服务供应商和客户间的一份合同,其中定义了服务类型.服务质量和客户付款等术语. 定义SLA:Service-L ...
- tomcat部署项目遇到的问题
场景:在一台服务器上部署多个Tomcat,每个Tomcat下运行各自的项目 * )启动Tomcat startup.cmd报错: java.lang.Exception: Socket bind fa ...
- python中匿名函数lambda如何用
python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的 ...
- ip协议,IP,子网掩码,ping命令是什么
ip协议: 定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示 IP地址:是给每个连接在Internet上的主机分配的一个32bit ...
- PIL库,图像处理第三方库
PIL ---> python imaging library 安装需要安装pillow库,包含了21种类,其中Image类是PIL最重要的一个类,可以通过它来处理图像. Python最常用的 ...