Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Web端拍照的另一种实现方式

Web端拍照的另一种实现方式

作者头像
terrence386
发布于 2022-07-14 12:58:57
发布于 2022-07-14 12:58:57
5840
举报

未来的IT工程师有两种 ,端工程师 ,云工程师

前情回顾

上篇文章大致总结了成为技术负责人需要的能力。今天本来聊一下web端的拍照方案方案。web端的拍照方案大致有以下两种,一是我们比较常见的图片上传的方案<input type="file" capture=camera/>可以调起摄像头。另外一种就不太常见了,利用webrtcapi方法navigator.mediaDevices.getUserMedia

具体思路

在界面上放置一个video标签,同时在界面上渲染一个canvas,然后点击按钮调起getUserMedia方法获取媒体流信息,在video标签中实时播放媒体流数据,同时点击拍照按钮时将video标签中的画面绘制到canvas中即可。

具体代码可能如下

  • HTML标记
代码语言:javascript
AI代码解释
复制
  <div class="camera">
    <video id="video">Video stream not available.</video>
    <button id="startbutton">Take photo</button>
  </div>
  <canvas id="canvas" style="display:none;">
  </canvas>
  <div class="output">
    <img id="photo" alt="The screen capture will appear in this box.">
  </div>
  • js代码
代码语言:javascript
AI代码解释
复制
  var width = 320;    // We will scale the photo width to this
  var height = 0;     // This will be computed based on the input stream

  var streaming = false;

  var video = null;
  var canvas = null;
  var photo = null;
  var startbutton = null;
  
  function startup() {
    video = document.getElementById('video');
    canvas = document.getElementById('canvas');
    photo = document.getElementById('photo');
    startbutton = document.getElementById('startbutton');
    
    navigator.mediaDevices.getUserMedia({ video: true, audio: false })
    .then(function(stream) {
        video.srcObject = stream;
        video.play();
    })
    .catch(function(err) {
        console.log("An error occurred: " + err);
    });
    
    video.addEventListener('canplay', function(ev){
      if (!streaming) {
        height = video.videoHeight / (video.videoWidth/width);

        video.setAttribute('width', width);
        video.setAttribute('height', height);
        canvas.setAttribute('width', width);
        canvas.setAttribute('height', height);
        streaming = true;
      }
    }, false);
    
    startbutton.addEventListener('click', function(ev){
      takepicture();
      ev.preventDefault();
    }, false);
    
    clearphoto();
  }
  
  // Fill the photo with an indication that none has been
  // captured.

  function clearphoto() {
    var context = canvas.getContext('2d');
    context.fillStyle = "#AAA";
    context.fillRect(0, 0, canvas.width, canvas.height);

    var data = canvas.toDataURL('image/png');
    photo.setAttribute('src', data);
  }
  
    function takepicture() {
    var context = canvas.getContext('2d');
    if (width && height) {
      canvas.width = width;
      canvas.height = height;
      context.drawImage(video, 0, 0, width, height);
    
      var data = canvas.toDataURL('image/png');
      photo.setAttribute('src', data);
    } else {
      clearphoto();
    }
  }

总结

  • 有很多jsApi我们在实际的工作中都没有用到过,但是有时候似乎又是需要了解的,所以还是要多思考一下问题的解决方案,不同的人的实现思路不一样,用了不同的API实现的方式也不一样。
  • 还是要不断扩充自己的知识面

javascript基础知识总结

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用浏览器的摄像头:原理、使用方式与实战
在现代 Web 应用中,调用摄像头 已经成为常见需求,比如视频会议、扫码登录、人脸识别等场景。浏览器本身提供了相应的 Web API,让开发者无需安装插件即可直接访问摄像头和麦克风。本文将从 原理、使用方式 到 实战案例,带你全面了解如何在浏览器中使用摄像头,并配合示意图和截图。
Front_Yue
2025/09/08
5000
使用浏览器的摄像头:原理、使用方式与实战
JavaScript调用摄像头
在浏览器中通过JavaScript调用摄像头主要使用 MediaDevices API,以下是详细步骤和示例代码:
贺公子之数据科学与艺术
2025/08/29
2050
如何用 WebRTC 给自己拍照?
最近一直在看 WebRTC 的用法,也学了一下音视频流的东西,今天就跟大家分享一个好玩的小实战吧——给自己拍照。
写代码的海怪
2022/03/29
1.1K0
如何用 WebRTC 给自己拍照?
h5页面实现扫码功能
后端参考文章 https://blog.csdn.net/qq_37924224/article/details/109582507
用户6379025
2022/12/26
1.8K0
神奇canvas 带你实现魔法摄像头
我们用手机的摄像头自拍,很容易实现 简单的自拍效果,如复古、黑白等等。其实我们使用web端的JavaScript也是可以实现的。接下来就带领小伙伴实现一个魔法摄像头。并且提供了截图下载功能。
万少
2025/02/10
3730
神奇canvas 带你实现魔法摄像头
js调用网页摄像头进行直播/拍照
具体文档可查看:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia
仙士可
2022/02/18
5.8K0
js调用网页摄像头进行直播/拍照
vue 人脸识别 demo
看到很多网上 vue 实现人脸识别的 demo ,很多都是不成形的源码。没办法,工作需要,自己借鉴别人的写了一个demo。( 可以满足所有的需求 )
小蔚
2020/08/31
2.7K0
H5中JS调用摄像头截图拍照并发送
H5中JS调用摄像头截图拍照并发送 <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>loding...</title> <style> body{background:#ffffff}.clock{position:absolute;opacity:1}.fill .clock{left:50%;top:50%}.centre{position
骤雨重山
2022/01/17
3K0
探秘移动端网页调用摄像头的两种方式
PC 端网页调用摄像头的场景想必大家并不陌生,打开一个网址,开启摄像头开始笔试/视频聊天/直播等。
掘金安东尼
2022/09/22
5.1K0
探秘移动端网页调用摄像头的两种方式
web H5摄像头-Media-Recorder-API-Demo
media-recorder-api <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>拍照2</title> </head> <body> <div style="display: block"> <button id="take" >拍照</button> <button onclick="upload()" >保存照片</button> <button
2021/11/08
6280
为了防止狗上沙发,写了一个浏览器实时识别目标功能
网友的家里有一条狗🐶,很喜欢乘人不备睡沙发🛋️,恰好最近刚搬家 + 狗迎来了掉毛期 不想让沙发上很多毛。所以希望能识别到狗,然后播放“gun 下去”的音频📣。
@派大星
2024/03/20
2760
为了防止狗上沙发,写了一个浏览器实时识别目标功能
网页调用本地摄像头,获取视频图片
PC端Web网页跳用本地摄像头,实时获取图片。(注意事项:如果是本地localhost可直接调用,挂到服务器必须使用https访问)
用户7741497
2022/02/28
2.3K0
H5利用JS调用电脑摄像头实现拍照效果
今天学习了调用电脑摄像头,利用canvas画布将视频当前帧转换成图片的实例,其中用到了 mediaDevices.getUserMedia 方法。该方法提示用户允许使用媒体输入,产生包含所请求类型的媒体轨道。包括视频轨道(由诸如照相机,视频记录设备,屏幕共享服务等的硬件或虚拟视频源产生),音频轨道(类似地,由物理或虚拟音频源,如麦克风,A / D转换器等),以及其他可能的轨道类型。
德顺
2019/11/12
10.2K1
WEBRTC 实现浏览器拍照
最近的几个需求都涉及到了扫码和拍照之类的功能,扫码用的是插件 html5-qrcode,拍照就自己写了一下,没多少行代码。
wade
2023/09/01
4690
WEBRTC 实现浏览器拍照
移动端图片上传旋转、压缩的解决方案
前言 在手机上通过网页 input 标签拍照上传图片,有一些手机会出现图片旋转了90度的问题,包括 iPhone 和个别三星手机。这些手机竖着拍的时候才会出现这种问题,横拍出来的照片就正常显示。因此,
IMWeb前端团队
2017/12/29
5.2K0
移动端图片上传旋转、压缩的解决方案
50行代码搞定OneCode摄像头插件:快速定制实战指南
在工业监控、人脸识别等场景中,摄像头集成是常见需求。本文将以OneCode平台的xui.UI.Camera组件为例,展示如何用50行核心代码实现一个功能完备的摄像头插件,涵盖设备访问、视频流显示和拍照功能,并提炼OneCode插件开发的核心要素。
OneCode
2025/07/06
1470
js调用USB摄像头拍照上传照片
参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices
用户7043603
2022/02/25
4.1K0
Python创建接口项目(FastAPI)及人脸识别
我们要实现一个人脸识别的功能,人脸识别的都是调用本地的图片,所以我们搭建一个接口服务来提供图片的上传。
码客说
2022/06/15
2.2K0
霸榜 GitHub:200 行代码让人瞬间消失!
今天,一个名为 Real-Time-Person-Removal(实时人物去除)项目在 GitHub 上火了,登上近日 GitHub Trending 第一,目前已经获得 1.8k star。
GitHubDaily
2020/02/25
1.2K0
使用H5的video标签播放视频,拍照保存和上传
补充:准备一个mp4的视频源 后端采用java实现,首先准备一个 mp4 的视频文件。新建一个springboot 工程,将 某个文件夹映射为静态资源目录,代码如下。
张云飞Vir
2021/04/27
2.3K0
相关推荐
使用浏览器的摄像头:原理、使用方式与实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档