使用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 前端方面的分 ...
随机推荐
- jQuery HTML-删除元素
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- hdu 3060 Area2 (计算几何模板)
Problem Description 小白最近又被空军特招为飞行员,参与一项实战演习.演习的内容还是轰炸某个岛屿(这次的岛屿很大,很大很大很大,大到炸弹怎么扔都能完全在岛屿上引爆),看来小白确实是飞 ...
- ansible_playbook语法中的循环语句归纳
种类一.标准循环添加多个用户 - name: add several users user: name={{ item }} state=present groups=wheel with_items ...
- POJ 3904 (莫比乌斯反演)
Stancu likes space travels but he is a poor software developer and will never be able to buy his own ...
- loj2009. 「SCOI2015」小凸玩密室
「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个 ...
- mysql 用户权限管理详细
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据
今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where D ...
- float不完整带来的IE7下的不兼容
这种原因是因为搜索用了float:right;添加报考院校和导入文件没有用float; 解决的方法是:1.给添加报考院校和导入文件分别添加float:left;2.把搜索那部分代码写在添加报考院校和导 ...
- LeetCode N皇后 & N皇后 II
题目链接:https://leetcode-cn.com/problems/n-queens/ 题目链接:https://leetcode-cn.com/problems/n-queens-ii/ 题 ...
- Linux基础-命令概述
概述 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务,是不是很帅!我们作为一个开发者, 即使不为了成为上述的人, 也需要会 ...