h5 调起相机_H5移动端调用相机或相册
一: 前提
在做H5时,有时要实现拍照功能,这就要调取手机端的相机,当时,在网上搜了很多能实现的方式,最后还是用html5自带的 input标签,实现移动端调用手机摄像头。好了,话不多说,下面就是我实现的代码:
二:实现
(一):调用手机相机或相册
图片二
其中input标签type="file"的参数capture表示,可以捕获到系统默认的设备,比如:camera照相机;camcorder摄像机;microphone录音,accept表示,直接打开系统文件目录,multiple属性,表示可以支持多选。
(二): 获取图片同时压缩,然后传给后台
// 解决ios照片旋转问题
//获取照片的拍摄方向
getOrientation(file, callback){
var reader = new FileReader();
reader.onload = function(e) {
var view = new DataView(e.target.result);
if (view.getUint16(0, false) != 0xFFD8){
return callback(-2);
}
var length = view.byteLength, offset = 2;
while (offset < length) {
var marker = view.getUint16(offset, false);
offset += 2;
if (marker == 0xFFE1) {
if (view.getUint32(offset += 2, false) != 0x45786966){
return callback(-1);
}
var little = view.getUint16(offset += 6, false) == 0x4949;
offset += view.getUint32(offset + 4, little);
var tags = view.getUint16(offset, little);
offset += 2;
for (var i = 0; i < tags; i++){
if (view.getUint16(offset + (i * 12), little) == 0x0112)
return callback(view.getUint16(offset + (i * 12) + 8, little));
}
}else if ((marker & 0xFF00) != 0xFF00){
break;
}else {
offset += view.getUint16(offset, false);
}
}
return callback(-1);
};
reader.readAsArrayBuffer(file);
},
/*
获取图片的事件
*/
onUpload(input) {
var _this = this;
if (_this.judgeZheng) {
_this.judgeZheng = false;
_this.hideImg2=true;
/*
imglist 是定义的一个存放图片的数组,来判断只能上传一张图片
*/
if (this.imgList.length >= 1) {
$.alert("只能上传一张照片!");
return;
}
if (input.target.files && input.target.files[0]) {
if (window.FileReader) {
var name = input.target.value.substring(
input.target.value.lastIndexOf(".") + 1,
input.target.value.lastIndexOf(".").length
);
var timeStamp = input.timeStamp;
/*
创建一个FileReader对象,用来获取文件
*/
var reader = new FileReader();
reader.onload = function(e) {
var objs = {
url: e.target.result,
name: name,
timeStamp: timeStamp
};
ysImg(objs, function(objs) {
_this.imgListzheng = objs.url;
_this.img_file = input;
_this.thumbnailUrl = objs.url;
_this.img_data = objs.url;
_this.img_name ='11.jpg';
_this.timeStamp = objs.timeStamp;
});
function ysImg(objs, callback) {
//设置压缩图片的最大高度
var imgarr = [];
var MAX_HEIGHT = 1000;
//获取拍摄方向
_this.getOrientation(input.target.files[0], function(orientation) {
_this.orientation = orientation;
});
// 创建一个 Image 对象
var image = new Image();
image.src = objs.url;
// 绑定 load 事件处理器,加载完成后执行
image.onload = function() {
// 获取 canvas DOM 对象
var canvas = document.createElement("canvas");
// 如果高度超标
if (image.height > MAX_HEIGHT && image.height >= image.width) {
// 宽度等比例缩放 *=
image.width *= MAX_HEIGHT / image.height;
image.height = MAX_HEIGHT;
}
//考录到用户上传的有可能是横屏图片同样过滤下宽度的图片。
if (image.width > MAX_HEIGHT && image.width > image.height) {
// 宽度等比例缩放 *=
image.height *= MAX_HEIGHT / image.width;
image.width = MAX_HEIGHT;
}
// 获取 canvas的 2d 画布对象,
var ctx = canvas.getContext("2d");
// canvas清屏,并设置为上面宽高
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 重置canvas宽高
canvas.width = image.width ;
canvas.height = image.height ;
//判断图片拍摄方向是否旋转了90度
if(_this.orientation == 6){
var x = canvas.width / 2; //画布宽度的一半
var y = canvas.height / 2; //画布高度的一半
ctx.clearRect(0,0, canvas.width, canvas.height); //先清掉画布上的内容
ctx.translate(x,y); //将绘图原点移到画布中点
ctx.rotate( (Math.PI / 180) * 90 ); //旋转角度
ctx.translate(-x,-y); //将画布原点移动
ctx.drawImage(image, 0, 0, image.width, image.height); //绘制图片
}else{
// 将图像绘制到canvas上
ctx.drawImage(image, 0, 0, image.width, image.height);
// !!! 注意,image 没有加入到 dom之中
// document.getElementById('img').src = canvas.toDataURL("image/png");
}
_this.blob = canvas.toDataURL("image/jpeg",0.5);
if (objs.url.length <_this.blob.length>
objs.url = objs.url;
} else {
objs.url =_this.blob;
}
var arrName=_this.blob.split(",");
var strName1=arrName[1];
/* 将获取的图片资源通过接口上传到后台
*/
_this.API.post('/gateway/gateway',{fileContent:strName1,fileName:'11.jpg',fileType:"A01"})
.then(function(res){
if(res.code=="000000"){
if(res.data.idCardNumber) {
_this.noName=res.data.name;
_this.noIdCardNumber=res.data.idCardNumber;
if(_this.blob3) {
_this.name=_this.noName;
_this.idCardNumber = _this.noIdCardNumber
}
}
_this.imgList.push(_this.imgListzheng);
}else{
_this.imgList=[];
_this.judgeZheng = true;
}
})
//将转换结果放在要上传的图片数组里
callback(objs);
};
}
};
reader.onabort = function() {
alert("上传中断");
};
reader.onerror = function() {
alert("上传出错");
};
reader.readAsDataURL(input.target.files[0]);
} else {
alert("Not supported by your browser!");
}
}
} else {
}
},
亲测有用哟。如果对你有帮助,用你的小手帮忙点个赞哟。 ღ( ´・ᴗ・` )比心
h5 调起相机_H5移动端调用相机或相册相关推荐
- 安卓端调用相机拍照返回并预览---清晰原图
安卓端调用相机拍照并返回预览图片 一.demo预览 二.xml代码和activity简单代码描述. 三.老规矩再来写几个转换工具方法 继之前写的安卓调用相机拍照返回预览,如果对于画质要求不高的话可以考 ...
- android相机拍照代码,Android 调用相机拍照,适配到Android 10
今天写的博客是关于Android调用手机相机拍照并显示图片.这是一个很常用的功能,并且这个功能在Android6.0.7.0.10.0等版本上实现都有所不同,需要对Android各个版本进行兼容适配, ...
- h5 调起相机_Html5在手机端调用相机的方法实现
input调用设备录像,相机等- HTML5官方文档解释:capture属性用于调用设备的摄像头或麦克风. 当accept="audio/或video/"时capture只有两种值 ...
- html5 调用本地街景,H5案例分享:在移动端调用腾讯街景
在移动端调用腾讯街景 腾讯地图街景组件可以通过多种方式调起,来展示3D街景信息. 腾讯街景API,是构建在v2版本上的全新应用接口,对于目的地,可以让用户足不出户,得到更直观.更真切 的身临其境的体验 ...
- Vue 移动端调用相机和相册实现图片上传
一.基础知识: 1.只调用手机相册 <input type="file" accept="image/*;" > 2.只调用手机相机拍照 <i ...
- android调用相机返回大图,Android调用相机拍照返回原图
在开始之前,先说下正常调用相机的状况: 正常调用相机,在 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActiv ...
- h5获取安卓定位_H5 移动端获取当前位置
3种方法: 1.H5自带的方法,获取经纬度 2.通过地图提供的JS.获取位置 3.通过微信的API(这个需要公众号 / 小程序) 1.通过H5自带的获取经纬度的方法 优点: 需要引用的资源较少,H5自 ...
- h5页面禁止复制_H5移动端页面禁止复制技巧
前言:业务需要,需要对整个页面禁止弹出复制菜单. 在禁止的页面中加入以下css样式定义 * { -webkit-touch-callout:none;/*系统默认菜单被禁用*/ -webkit-use ...
- vue移动端调用照相机及相册
<template><div class="me-detail"><m-hbar title="个人笔记"/><div ...
最新文章
- 【HDU】4706 Children's Day(模拟)
- python 项目构建工具_python的构建工具setup.py
- 美团O2O排序解决方案——线下篇
- angular 获取ng-repeat完成状态 $last
- 程序员小抄 (转载自酷壳,一个专注技术的博客)
- 如何给影像添加投影_地面互动投影是如何实现的,需要哪些设备?
- 【MySQL】MySQL show index 索引信息
- c++------------之---【虚函数和抽象基类的应用】
- pooleddb mysql_使用dbutils的PooledDB连接池,操作数据库
- php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...
- 计算机网络的三种通讯模式(单播,广播,组播)小结
- mysql --force 无效_【技能库】--mysql 索引失效 force index也失效-- 原因解决方案(256)...
- win 7系统微信如何用代理服务器,win7系统电脑上使用微信的操作方法
- 《增长黑客》- 读书笔记(一)
- 家用无线路由器设置技巧
- 服务器操作系统本备份,服务器操作系统本备份
- JAVA 利用ASCII码偏移(来自IDEA免费激活码游戏)
- 自定义配置log日志
- QR分解、RQ分解与SVD
- Sigar获取系统信息
热门文章
- itunes 无法构建版本问题
- umi 兼容ie11 按照官方配置还是失败处理
- #2 VS Code字体大小和行间距设置
- 2013蓝桥杯 黄金分割数 斐波那契数列与黄金分割比例的结合应用+模拟手算
- 中年人的第N个HelloWorld
- c#串口缓存字节数_c#串口编程(转)
- tyvj 4752 数学逻辑题
- 游戏笔记本计算机购买,2021年4月|游戏笔记本电脑选购,个人主观推荐
- 台式计算机idc数据排名,IDC:2018年全球个人计算设备出货量约为4.07亿台 下滑大约3.9%...
- 2020年版教育直播平台排名早已出来,你看过了吗?