zoukankan      html  css  js  c++  java
  • Canvas与Image互相转换示例以及利用该技术实现微信长按自动识别二维码功能

    现在扫描二维码已经很普遍,微信扫一扫即可,但是如果二维码是在自己的手机上呢?那就要用到微信里的一个功能了,手指长按二维码,会弹出自动识别的选项,点确定就可以看到二维码的内容了。那么怎么通过前端实现这个长按自动识别这个功能呢?

    首先我们需要知道利用jquery的二维码生成插件jquery.qrcode.min.js,制作的二维码是在canvas元素中的。而微信中我们点击的那个二维码则是img元素。这时,我们就会想,只要把canvas中的二维码转换成img形式,不就可以啦。没错,就是这么简单!

    下面先来普及一下canvas和image互相转换的知识:

    1. 把img转换为canvas对象

    function convertImageToCanvas(image){
    
        //创建canvas DOM对象,并设置其宽高和图片一样
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
    
        //坐标(0,0)表示从此处开始绘制,相当于偏移
        canvas.getContext("2d").drawImage(image,0,0);
        return canvas;          
    }

    2. 把canvas转换为img

    // 从canvas提取图片image   
    
     function convertCanvasToImage(canvas){
    
         //新Image对象,可以理解为DOM;
         var image = new Image();
    
         //canvas.toDataURL返回的是一串Base64编码的URL,当然,浏览器自己肯定支持
         //指定格式PNG
         image.src = canvas.toDataURL("image/png");
         return image;
    }

    示例代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Canvas与Image互相转换示例</title>
    </head>
    <body>
    
        <img src="./list-icon-5.png" alt="" id="photo" width="17" height="24">
        <div id="canvasDiv" style=" 300px; height: 30px;"></div>
        <div id="convertedImg"></div>
    
        <script src="./jquery-1.11.3.min.js"></script>
        <script>
    
            $(function(){
    
                // 把image转换为canvas对象
                var photo = document.getElementById('photo');//这个必须用原生
                var cDiv = convertImageToCanvas(photo);
                $("#canvasDiv").append(cDiv);
    
                // image-->canvas
                function convertImageToCanvas(image){
                    //创建canvas DOM对象,并设置其宽高和图片一样
                    var canvas = document.createElement("canvas");
                    canvas.width = image.width;
                    canvas.height = image.height;
                    //坐标(0,0)表示从此处开始绘制,相当于偏移
                    canvas.getContext("2d").drawImage(image,0,0);
                    return canvas;
                }
    
                // 把canvas转换为image的
                var myCanvas = document.getElementsByTagName("canvas")[0];
                var img = convertCanvasToImage(myCanvas);
                $("#convertedImg").append(img);
    
                // canvas-->image
                function convertCanvasToImage(canvas){
                    //新Image对象,可以理解为DOM;
                    var image = new Image();
                    //canvas.toDataURL返回的是一串Base64编码的URL,当然,浏览器自己肯定支持
                    //指定格式PNG
                    image.src = canvas.toDataURL("image/png");
                    return image;
                }
            });
    
    </script>
    </body>
    </html>

    效果如下:

    那么实现微信长按二维码识别的功能就很简单了,直接上代码吧~

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jquery实现微信长按识别二维码功能</title>
        <script src="./jquery-1.11.3.min.js"></script>
        <script type="text/javascript" src="jquery.qrcode.min.js"></script>
    </head>
    <body>
    
        <!--canvas中的二维码-->
        <div id="qrDiv" style="display: none;"></div>
        <!--image形式的二维码-->
        <div id="imgDiv"></div>
    
    <script>
    
        $(function(){
    
            //利用插件生成二维码,生成的二维码在canvas中
            $('#qrDiv').qrcode({
                 120,
                height:120,
                text: "https://www.baidu.com/"
            });
    
            //从canvas中提取图片image
            function convertCanvasToImage(canvas) {
                //新Image对象,可以理解为DOM
                var image = new Image();
                // canvas.toDataURL 返回的是一串Base64编码的URL,当然,浏览器自己肯定支持
                // 指定格式PNG
                image.src = canvas.toDataURL("image/png");
                return image;
            }
    
            //获取网页中的canvas对象
            var mycanvas1=document.getElementsByTagName('canvas')[0];
    
            //将转换后的img标签插入到html中
            var img = convertCanvasToImage(mycanvas1);
            $('#imgDiv').append(img);//imgDiv表示你要插入的容器id
        })
    
    </script>
    </body>
    </html>
  • 相关阅读:
    redis连接客户端
    map中使用的细节问题(不同key循坏中被后面的值替换)
    使用异步开启新的线程Spring异步方法注解@Async
    npm init 出现一堆提问(npm init -y)
    小程序的时间日期选择器
    小程序--分类项目跳转页面(同样也适用轮播图跳转)
    小程序样式不管用,解决方法button:not([size='mini']) { width: 184px; margin-left: auto; margin-right: auto; }
    vue-elementui的时间日期选择器( value-format="yyyy-MM-dd HH:mm:ss"),以及时间解析{y}-{m}-{d} {h}:{i}:{s}
    vue.config.js配置详细说明(逐条解释)
    element在el-table-column中如何使用过滤器
  • 原文地址:https://www.cnblogs.com/sapho/p/6143819.html
Copyright © 2011-2022 走看看