最近公司要求做一个在线拍照的功能,具体代码如下:
<html> <head> <title>html5调用摄像头拍照</title> <style type="text/css"> #camera { width: 640px; height: 525px; position: fixed; border: 1px solid #f0f0f0; -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; -moz-box-shadow: 0 0 4px rgba(0,0,0,0.6); -webkit-box-shadow: 0 0 4px rgba(0,0,0,0.6); box-shadow: 0 0 4px rgba(0,0,0,0.6); } #buttons { text-align: center; } .btn { width: 99px; height: 38px; line-height: 32px; margin: 0px 4px 0px 0px; border: 1px solid #fff; -moz-border-radius: 5px; /* Gecko browsers */ -webkit-border-radius: 5px; /* Webkit browsers */ border-radius: 5px; /* W3C syntax */ cursor: default; text-align: center; font-size: 14px; color: #fff; } .btn_blue { background-color: #5CACEE; } .btn_green { background-color: #00EE00; } .hidden{ display:none } </style> </head> <body> <div id="camera"> <div id="contentHolder"> <video id="video" width="640" height="480" autoplay></video> <canvas style="display:none;" id="canvas" width="640" height="480"></canvas> </div> <div id="buttons"> <button id="btn_snap" class="btn btn_blue">拍照</button> <button id="btn_cancel" class="btn btn_blue" style="display:none;">取消</button> <button id="btn_upload" class="btn btn_green" style="display:none;">上传</button> </div> </div> </body> </html> <script type="text/javascript"> // 添加事件监听器 window.addEventListener("DOMContentLoaded", function () { // 获取元素,创建设置等等 var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), video = document.getElementById("video"), videoObj = { "video": true }, errBack = function (error) { console.log("Video capture error: ", error.code); }; // 添加video 监听器 if (navigator.getUserMedia) { // 标准 navigator.getUserMedia(videoObj, function (stream) { video.src = stream; video.play(); }, errBack); } else if (navigator.webkitGetUserMedia) { // WebKit 前缀 navigator.webkitGetUserMedia(videoObj, function (stream) { video.src = window.webkitURL.createObjectURL(stream); video.play(); }, errBack); } else if (navigator.mozGetUserMedia) { // Firefox 前缀 navigator.mozGetUserMedia(videoObj, function (stream) { video.src = window.URL.createObjectURL(stream); video.play(); }, errBack); } else { alert("浏览器不支持HTML5!"); //console.log('your browser not support getUserMedia'); } document.getElementById("btn_snap").addEventListener("click", function () { context.drawImage(video, 0, 0, 640, 480); }); }, false); </script>
但是有一些缺点就是,无法调整摄像头的分辨率,导致拍摄的照片不清晰。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?