当前位置:首页 > JavaScript

js实现拍照

2026-03-14 07:43:56JavaScript

使用HTML5和JavaScript实现拍照功能

通过浏览器的getUserMedia API可以访问设备的摄像头,结合canvas元素实现拍照功能。以下是一个完整的实现示例:

<!DOCTYPE html>
<html>
<head>
    <title>拍照示例</title>
    <style>
        #video, #canvas {
            width: 400px;
            height: 300px;
            border: 1px solid #ccc;
        }
        #capture {
            margin-top: 10px;
            padding: 8px 16px;
            background: #4CAF50;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <video id="video" autoplay></video>
    <canvas id="canvas"></canvas>
    <button id="capture">拍照</button>

    <script>
        const video = document.getElementById('video');
        const canvas = document.getElementById('canvas');
        const captureBtn = document.getElementById('capture');
        const context = canvas.getContext('2d');

        navigator.mediaDevices.getUserMedia({ video: true })
            .then(stream => {
                video.srcObject = stream;
            })
            .catch(err => {
                console.error('无法访问摄像头:', err);
            });

        captureBtn.addEventListener('click', () => {
            context.drawImage(video, 0, 0, canvas.width, canvas.height);
            const imageData = canvas.toDataURL('image/png');
            console.log(imageData); // 这里可以上传到服务器或保存
        });
    </script>
</body>
</html>

关键代码解析

navigator.mediaDevices.getUserMedia({ video: true })请求访问用户摄像头,返回一个Promise。成功后会得到一个媒体流对象。

video.srcObject = stream将媒体流赋值给video元素的srcObject属性,这样视频就会在页面上显示。

context.drawImage(video, 0, 0, canvas.width, canvas.height)将video当前帧绘制到canvas上。

canvas.toDataURL('image/png')将canvas内容转换为base64编码的图片数据,可以用于保存或上传。

注意事项

页面必须通过HTTPS协议或在localhost环境下运行,否则getUserMediaAPI会被浏览器阻止。

部分浏览器可能需要用户明确授权才能访问摄像头。如果用户拒绝授权,Promise会被拒绝。

移动设备上需要考虑横竖屏切换时的布局适配问题。

扩展功能

可以添加滤镜效果,通过修改canvas的像素数据实现。

添加照片保存功能,将base64数据转换为Blob对象后下载。

js实现拍照

实现连续拍照功能,设置定时器自动捕获多张照片。

标签: js
分享给朋友:

相关文章

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…