首页 > 其他分享 >h5拍照功能

h5拍照功能

时间:2023-01-11 13:44:26浏览次数:40  
标签:拍照 img res 功能 h5 xhr window var preview

<!doctype html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>拍照上传</title>
        <style>
            #preview {
                padding: 1px;
                box-sizing: border-box;
                width: 140px;
                height: 140px;
                border: 2px dashed #fff;
                background-color: #0d7bc9;
                border-radius: 50%;
                margin-top: 100px;
                display: flex;
                flex-direction: column;
                justify-content: center;
                align-items: center;
            }

            #preview img {
                width: 100%;
                height: 100%;
                border-radius: 50%;
                object-fit: cover;
            }

            #face-box {
                display: flex;
                flex-direction: column;
                align-items: center;
            }

            #label-file {
                font-size: 14px;
                padding: 10px 30px;
                color: #ffff;
                text-align: center;
                border-radius: 50px;
                border: none;
                background-color: #0d7bc9;
                width: 200px;
                height: 30px;
                line-height: 30px;
                margin-top: 100px;
            }

            #uploadImg {
                display: none;
            }
        </style>
    </head>

    <body>
        <div id="face-box">
            <div class="photo" id="preview"></div>
            <label for="uploadImg" id="label-file">拍照</label>
            <input type="file" accept="image/*" id="uploadImg" capture="camera" name="uploadImg">
        </div>
    </body>

</html>
<script>
    var uploadImg = document.getElementById('uploadImg'),
        preview = document.getElementById('preview'),
        btnSubmit = document.getElementById('btnSubmit'),
        imgurl = '';
    uploadImg.addEventListener('change', handleFileImg, false);
    // 拍照选择完成的回调
    function handleFileImg() {
        getImgSrc().then((res) => {
            submitImg(res,getQueryString('uploadKey'));
        })
    }
    function getImgSrc() {
        return new Promise((resolve, reject) => {
            // 为了获取图片的本地路径
            window.URL = window.URL || window.webkitURL;
            // 获取移动端类型Android   iPhone  ipad
            var sUserAgent = navigator.userAgent.toLowerCase();
            // 获取当前图片信息(单张图片上传)
            var selected_file = uploadImg.files[0];
            if (sUserAgent.match(/android/i) == "android") {
                var img = new Image();
                // 生成一个本地图片展示路径
                img.src = window.URL.createObjectURL(selected_file);
                preview.innerHTML = '';
                // 添加到页面展示
                preview.appendChild(img);
                var reader = new FileReader();
                reader.onload = function (e) {
                    imgurl = e.target.result;
                    resolve(imgurl);
                };
                reader.readAsDataURL(selected_file);
            } else {
                //判断文件类型是否为图片
                if (!selected_file.type.match(/image.*/)) return false;
                var img = document.createElement('img');
                // base64赋值 
                img.file = selected_file;
                preview.innerHTML = '';
                preview.appendChild(img);

                img.onload = function () {
                    imgurl = img.src;
                    resolve(imgurl);
                };

                var reader = new FileReader();
                reader.onload = function (e) {
                    img.src = e.target.result;
                };
                reader.readAsDataURL(selected_file);
            }
        })
    }
    // 上传base64编码到后台
    function submitImg(img,key) {
        var start = img.indexOf(',') + 1;
        var params ="imgBase64=" + encodeURIComponent(img.substr(start)) +"&uploadKey=" + key;
        var url = '后台地址'
        var xhr = new XMLHttpRequest();
            xhr.open('post', url);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    if(xhr.responseText){
                        var res = JSON.parse(xhr.responseText);
                        var ua = navigator.userAgent.toLowerCase();
                        var isWeixin = ua.indexOf('micromessenger') != -1;
                        if(res.code == 200){
                            alert('上传成功,请再PC端操作!')
                            if (!isWeixin) {
                                window.opener=null; 
                                window.open('','_self',''); 
                                window.close()
                            }else{
                                setInterval(()=>{
                                    WeixinJSBridge.call("closeWindow")
                                },300)
                            } 

                        }else{
                            alert('上传失败,重新扫描上传')
                        }
                    }
                   console.log(res)
                }
            }
            xhr.send(params);
       
    }
    /**
 * 
 * @param {*} name   地址栏参数名
 * @returns 
 */
 function getQueryString(name){
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)",'i');
        var res = window.location.search.substr(1).match(reg);
        if(res[2]){
           return res[2];
        }else{
            return null;
        }
    }

</script>

 

标签:拍照,img,res,功能,h5,xhr,window,var,preview
From: https://www.cnblogs.com/zxh-bug/p/17043465.html

相关文章

  • HAL库教程11:定时器的缓冲功能与影子寄存器
      在STM32的定时器中,TIMx_PSC、TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,或者说,修改过后立即生......
  • 直播美颜SDK的功能实现流程——美白、磨皮
    时下,很多开发者和技术发烧友想要自主开发直播美颜SDK,但受限于技术原因导致进度受阻,下文小编总结了直播美颜SDK美白与磨皮功能的实现流程,阅读时间大约五分钟。众所周知,一套完......
  • Vue2.002.开发过程中部分功能实现
    01.Vue中动态加载图片失败时,默认图片的配置>> 引入图片:  importdefaultImgfrom'@/assets/default.png'>> img 标签配置@error 事件,   @error="......
  • H5直播技术起航
    作者:京东科技吴磊音视频基本概念视频格式就是通常所说的.mp4,.flv,.ogv,.webm等。简单来说,它其实就是一个盒子,用来将实际的视频流以一定的顺序放入,确保播放的有序和完整......
  • 前端如何实现网页变灰功能?
    今天来从前端的角度看看网页置灰是如何实现的,以及相关使用技巧!实现思路先来看看一些主流网站是如何实现置灰的:BiliBili:image.png淘宝:image.png京东:i......
  • Qt-Qt之实现框选地图功能(返回选中区域经纬度)
     .pro1QT+=coregui23greaterThan(QT_MAJOR_VERSION,4):QT+=widgets45CONFIG+=c++1167#Thefollowingdefinemakesyourcompi......
  • SOLIDWORKS 2023工程图和出详图新功能 创建更智能化 更高精度的工程详图
    工程图是传达您设计意图的重要文档,您设计的产品越复杂,越需要详细注释说明。SOLIDWORKS2023增强的工程图和出详图功能将帮助您创建更智能化、更高精度的工程详图,并且扩展新......
  • 常用功能系列---【JWT生成Token实现接口登录认证方案思路】
    JWT生成Token实现接口登录认证方案思路方案一(双token实现无感刷新)在token中,refreshToken的作用主要是避免token过期时,前端用户突然退出登录,跳转至登录页面。但是如何实......
  • 二次开发多功能ARM 控制器
    双网口4路串口ARM嵌入式工控机BL302是工业级坚固型工业控制器,采用NXP的高性能处理器I.MX6ULL,搭配先进的ARMCortex-A7构架,运行速度高达800MHz,具有高度的稳定性。本产......
  • ADAS硬件配置和功能
    一、概念+杂乱项目分类1R1V(毫米波雷达radar×1+前视多功能摄像头video×1)5R1V(毫米波雷达×5+前视多功能摄像头×1)的传感器配置,其中5个毫米波雷达由一个前向毫米波雷......