H5调起手机端的摄像头

17 篇文章 3 订阅
13 篇文章 1 订阅

H5调起手机端的摄像头

这里主要是用input的capture属性。
capture表示,可以捕获到系统默认的设备,比如:camera照相机;camcorder摄像机;microphone录音。accept表示,直接打开系统文件目录。

<label>
	照相机:
	<input type="file" id='image' accept="image/*" capture='camera' multiple>
</label>
<label>
	摄像机:
	<input type="file" id='video' accept="video/*" capture='camcorder'>
</label>

其中multiple属性表示可以多选。

1.对于安卓手机和ios不同处理

在各个机型都可以点击 file 调用相册 和 摄像头拍照

  • 在老版本的安卓中,必须加上capture,否则只能调用相册
  • 在IOS中 加了capture,就只能调用摄像头不能调用相册

解决办法:
判断ios,如果是ios就去掉capture属性.

var file = document.querySelector('input');
if (getIos()) {
   file.removeAttribute("capture");
}
function getIos() {
   var ua=navigator.userAgent.toLowerCase();
   if (ua.match(/iPhone\sOS/i) == "iphone os") {
      return true;
   } else {
      return false;
   }
}

2.获取图片的base64

html部分:

<input type="file" id="file1" accept="image/*" capture="camera" @change="changePic" />
<!-- accept="video/*" 可调用摄像头拍摄视频 -->

js部分:

changePic(e) {
    // console.log(e)
    const _this = this;

    const fileObj = e.target;

    const file = fileObj.files[0];

    const reader = new FileReader();

    reader.readAsDataURL(file);

    reader.onload = function(e) {
          const imgResult = e.target.result;
          // 可预览的图片地址
          _this.imgResult = imgResult;
    };
}

3.实例

我这边自己也做了一个简单的demo:(ios系统测试)
在这里插入图片描述
效果:
在这里插入图片描述
本博客非原创,来自转载https://blog.csdn.net/weixin_39228870/article/details/114370029

在HTML5中,调用手机摄像头拍摄照片通常涉及到JavaScript和一些设备访问API,比如Web API (Media Streams)。以下是简单的步骤: 1. **获取用户授权**:首先,你需要在`<script>`标签内通过`getUserMedia()`方法请求用户的媒体权限,尤其是对相机的访问。 ```html <script> function getUserMediaSuccess(stream) { // 接下来处理流 } function getUserMediaError(err) { console.error('Failed to access camera: ', err); } navigator.mediaDevices.getUserMedia({ video: true }) .then(getUserMediaSuccess) .catch(getUserMediaError); </script> ``` 2. **创建视频元素**:创建一个HTML5 `<video>`元素,并设置其srcObject属性为从`getUserMedia()`获取的stream,这样视频就会显示实时摄像头画面。 ```html <video id="camera" width="300" height="200"></video> ``` 3. **触发拍照**:当用户想要拍照时,你可以创建一个Canvas画布,然后从video元素上截取帧,保存为图片。例如: ```javascript document.getElementById('takePicture').addEventListener('click', function() { var canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; var ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, canvas.width, canvas.height); // 然后将canvas转换为Blob并下载 }); ``` 4. **下载图片**:将生成的canvas转换为Blob,然后提供给用户下载。 ```javascript var imgBlob = canvas.toDataURL('image/jpeg'); // 或者 image/png var link = document.createElement('a'); link.href = imgBlob; link.download = 'photo.jpg'; // 可自定义文件名 link.click(); ``` 请注意,以上示例需要在现代浏览器支持WebRTC和getUserMedia的情况下运行,并且可能受到浏览器安全策略的影响。在实际应用中,可能还需要处理更多边缘情况和兼容问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值