使用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 前端方面的分 ...
随机推荐
- Devops、CI\CD、Jenkins
Devops DevOps对应用程序发布的影响 在很多企业中,应用程序发布是一项涉及多个团队.压力很大.风险很高的活动.然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下 [2] : ...
- PHP clearstatcache() 函数
定义和用法 clearstatcache() 函数清除文件状态缓存. PHP 会缓存某些函数的返回信息,以便提供更高的性能.但是有时候,比如在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被 ...
- 06-图2 Saving James Bond - Easy Version(25 分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
- iframe中涉及父子页面跨域问题
什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制.所谓同源是指相同的域名.协议和端口,只要其中一项不同就为跨域. 举几个例子: http:/ ...
- windows10下安装Mysql 5.6(zip格式安装包)
5.6的安装包是一个zip文件,里面包含了data(有表空间文件和日志文件),bin等文件夹.不同于以往的只需要双击安装.msi就行了.因此,在此记录下安装包是.zip时的安装步骤. 1下载 进htt ...
- PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
PHP CURL与file_get_contents函数都可以获取远程服务器上的文件保存到本地,但在性能上面两者完全不在同一个级别,下面我先来介绍PHP CURL或file_get_contents函 ...
- LiveTelecast直播平台技术图谱skill-map
#直播平台技术图谱 ----##直播 ----###采集- **iOS** * HTTP Live Streaming * DirectShow- **Android** * setPreviewCa ...
- python基础-包和模块
Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...
- 未来-YLB-跳蚤市场:跳蚤市场(flea market)
ylbtech-未来-YLB-跳蚤市场:跳蚤市场(flea market) 跳蚤市场(flea market)是欧美等西方国家对旧货地摊市场的别称.由一个个地摊摊位组成,市场规模大小不等. 出售商品多 ...
- 68、Schema的相关类
public class SObjectSchema { public void testSchema(){ //获取SObject的token //1.先获取所有token,然后通过key获取需要的 ...