js实现浏览器视频拍照功能

news/2024/7/19 13:29:08 标签: js, css, javascript, html5

话不多说,直接上代码:

js"><!DOCTYPE html>
<html lang="en">
<head>
    <!-- 样式部分可以忽略 -->
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        div {
            width: 100vw;
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .btn {
            width: 100px;
            height: 50px;
            border-radius: 10px;
            background: #ff9900;
            line-height: 50px;
            text-align: center;
            color: #fff;
            box-shadow: 0 0 10px #999;
        }
        video, canvas {
            width: 300px;
            height: 300px;
            border: 5px solid #000;
            border-radius: 10px;
            margin-left: 5px;
        }
    </style>
</head>
<body>
    <div>
        <div id="play" class="btn">开启摄像</div>
        <div id="take" class="btn">拍照</div>
        <video id="video"></video>
        <!-- 尽量在canvas标签上设置宽高 -->
        <canvas id="canvas" width="300px" height="300px"></canvas>
    </div>
    <script>
        // 开启摄像
        document.getElementById('play').onclick = () => {
            let constraints = {
                // video属性设置
                video: {
                    width: 300,
                    height: 300
                },
                // audio属性设置
                audio: true
            }
            navigator.mediaDevices.getUserMedia(constraints)
            .then(mediaStream => {
                // 成功返回promise对象,接收一个mediaStream参数与video标签进行对接
                document.getElementById('video').srcObject = mediaStream
                document.getElementById('video').play()
            })
            // 失败就失败了
        }
        // 拍照、canvas绘制
        document.getElementById('take').onclick = () => {
            let ctx = document.getElementById("canvas").getContext('2d')
            ctx.drawImage(document.getElementById("video"), 0, 0, 300, 300)
        }
    </script>
</body>
</html>

http://www.niftyadmin.cn/n/1527211.html

相关文章

[linux] iptables 使用总结(2)

文章目录 参考注意reject 日志样例ip6tables 于ip4 GRE交互问题systemctl status iptablesrpfilter丢弃一切从eth0上来的包帮助文档选项按照字符串 过率按照大小 过率随机丢包在OUTPUT表里,删除ruleiptables -nvL INPUT ##具体是 -v 选项发生了作用。查看mangle表运行情况修…

虚拟DOM中的key

一、react/vue中的key有什么作用&#xff1f;&#xff08;key的内部原理是什么&#xff1f;&#xff09; 虚拟DOM中key的作用&#xff1a; 简单的说: key是虚拟DOM对象的标识, 在更新显示时key起着极其重要的作用。 详细的说: 当状态中的数据发生变化时&#xff0c;react会根…

TypeScript全攻略(收藏吃灰必备!)

文章目录1、TypeScript 简介1.1、什么是 TypeScript1.2、为什么要使用 TypeScript2、安装 TypeScript2.1、使用 tsc 命令编译 TypeScript 代码2.2、使用 ts-node 快速编译 TypeScript2.3、使用工程化编译方案3、TypeScript 基本数据类型3.1、变量声明3.2、TypeScript 基本类型3…

docker 从container 创建 image tar.gz 包

文章目录sudo docker ps从image 启动container&#xff1b;copy从container 创建 image tar.gz 包进入containersudo docker ps 从image 启动container&#xff1b; docker run --cap-addSYS_NICE --privileged -d -it --env ROOT/utas/bin --name ut1 abc:latest bash copy…

DeadlineExceeded

在kubernetes 1.17.4 版本 这两行log 是一行 因为cmd 参数里有换行符导致大印到两行。 描述的含义&#xff0c;kubelet试图再container里执行一个命令&#xff0c;但是timeout&#xff0c;超时了。 Jun 8 04:02:34 all-in-one-01 kubelet: E0608 04:02:34.476604 17869 rem…

Ant Design的按需引入+自定义主题颜色

一、安装依赖&#xff1a; yarn add react-app-rewired customize-cra babel-plugin-import less less-loader二、修改package.json ...."scripts": {"start": "react-app-rewired start","build": "react-app-rewired build&q…

React-redux-dom解决刷新页面后数据丢失的问题

为什么要存储react-redux-dom中的数据&#xff1f; 当页面刷新之后&#xff0c;redux中的数据会回到初始值&#xff0c;之前存储到redux中的数据也就不复存在了。 在reducer文件中&#xff1a; let shopDetailInfo sessionStorage.getItem(data)?JSON.parse(sessionStorag…

Ant Design刷新页面后导航栏丢失选中状态

Router路由目录&#xff1a; const router [{"title": "后台首页","icon": "home","path": "/home"},{"title": "商品管理","icon": "carts","path": "…