使用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 前端方面的分 ...
随机推荐
- jsp 锚定位的方式
//js定位方式1 document.getElementById('id').scrollIntoView(); //jquery定位方式 var t = $('#id').offset().top ...
- tp框架基础控制器调用方法
public function indd(){ //调用该控制器下的某个方法 $this ->index(); //跨控制器调用 $k = A("index");// 创建控 ...
- Python--多态与多态性、绑定方法与非绑定方法
多态与多态性 多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. s='hello' l=[,,] t=('a',' ...
- Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全
一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...
- 如何在程序中执行动态生成的Delphi代码
如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...
- AcWing 227. 小部件厂 (高斯消元)打卡
题目:https://www.acwing.com/problem/content/description/229/ 题意:有很多个零件,每个零件的生产时间都在3-9天之间,现在只知道每个工人的生产部 ...
- 2019 牛客暑期多校 B generator 1 (矩阵快速幂+倍增)
题目:https://ac.nowcoder.com/acm/contest/885/B 题意:给你x0,x1,让你求出xn,递推式时xn=a*xn-1+b*xn-2 思路:这个n特别大,我自己没有摸 ...
- NetHogs——Linux下按进程实时统计网络带宽利用率
Debian/Ubuntu下安装很简单,执行:apt-get install nethogs 就可以安装. CentOS/RHEL下建议先安装上EPEL,再执行:yum install libpcap ...
- 网页实时聊天之PHP如何实现websocket
网页实时聊天之PHP如何实现websocket 一.总结 一句话总结: 应用 PHP 的 socket 函数库:PHP 的 socket 函数库跟 C 语言的 socket 函数非常类似 PHP 实现 ...
- (59)C# IIS Express 设置
支持非localhost访问 本地测试时 修改 localhost改成127.0.0.1