精华内容
参与话题
问答
  • python+selenium 识别二维码,运行环境是win 10 64位+python 3.5.2+selenium3.3.1。该方法可以简单识别验证码。1、搭建环境:识别验证码图片,需要安装以下三个小部件:一、安装Pillowcmd命令行cd python安装目录下...

    python+selenium 识别二维码,运行环境是win 10 64位+python 3.5.2+selenium  3.3.1。

    该方法可以简单识别验证码。

    1、搭建环境:识别验证码图片,需要安装以下三个小部件:

    一、安装Pillow

    cmd命令行

    cd  python安装目录下的Scripts

    用命令pip install Pillow

    二、pytesseract

    方法如同安装Pillow ,pip install pytesseract

    三、tesseract-ocr

    在网上找到德国曼海姆大学发行的3.05版本tesseract-ocr安装包,上传到百度云网盘,地址是:http://pan.baidu.com/s/1i4LNaol

    下载完成后,安装。默认安装在C:\Program Files (x86)\Tesseract-OCR。这是系统盘,运行py文件会报错,

    Traceback (most recent call last):

    File “D:/test.py”, line 11, in

    print(pytesseract.image_to_string(Image.open(‘d:/testimages/name.gif’), lang=’chi_sim’))

    File “C:\Users\dell\AppData\Local\Programs\Python\Python35\lib\site-packages\pytesseract\pytesseract.py”, line 165, in image_to_string

    raise TesseractError(status, errors)

    pytesseract.pytesseract.TesseractError: (1, ‘Error opening data file \\Program Files (x86)\\Tesseract-OCR\\tessdata/chi_sim.traineddata’)

    安装在系统盘。需要注意的是:py文件要移动到C:盘运行,不能在python安装目录下运行。

    安装好tesseract-ocr,可以测试一下该软件的准确度。

    找一张验证码图片,放到C:\Program Files (x86)\Tesseract-OCR下,名字任意,命名为picture,还要新建一个txt文件,命名为output。以管理员身份运行cmd,cd C:\Program Files (x86)\Tesseract-OCR。输入tesseract picture.jpg output -l eng。再输入type output.txt,输出验证码。

    参考网页:http://www.w2bc.com/article/146617

    四、让py文件调用tesseract命令,

    有两种方法,一是在安装目录下,找到pytesseract.py文件,修改tesseract_cmd =’C:/Program Files (x86)/Tesseract-OCR/tesseract’

    二是设置环境变量,把C:/Program Files (x86)/Tesseract-OCR添加到path中,如图所示:

    2、新建py文件,输入代码:(笔者放入了两张图片,分别命名为1,2)

    import pytesseract

    from PIL import Image

    import time

    image=Image.open(‘2.png’)

    print(pytesseract.image_to_string(image))

    time.sleep(5)

    image_2=Image.open(‘1.jpg’)

    print(pytesseract.image_to_string(image_2))

    输出结果,如下:

    图片1、图片2

    原文:https://blog.csdn.net/qq_22821275/article/details/72886789

    白龙码一物一码:企业级防伪追溯专家,行业领先的一站式产品追溯、防伪、营销解决方案提供商,具体详见

    展开全文
  • zxing二维码生成扫描,识别二维码图片,长按识别二维码调用方便简洁,可选择导入as的modules 只需要在bulid.gradle(app) 中的dependencies :里面 compile project(path: ':BarCode')一下就能用。
  • <div><p>调用系统相册识别二维码(测试说对着电脑拍照的二维码的图片用相册打开识别率不高),已经用在项目里了,还提了一个bug</p><p>该提问来源于开源项目:yuzhiqiang1993/zxing</p></div>
  • php 识别二维码或条形码需要 3 个工具。 1. ImageMagick ImageMagick 是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装。它可以读取、编辑超过 100 种图象格式。ImageMagick 以 ImageMagick ...
  • 主要介绍了Android 生成和识别二维码的方法,提供源码下载,需要的朋友可以参考下。
  • 需求:点击图片后长按图片出现“识别二维码” 1、JS代码: &lt;script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"&gt;&lt;/script&gt; &lt;script type="text/...

    场景:微信小程序,使用webview控件。需求:点击图片后长按图片出现“识别二维码”

    1、JS代码:

    
    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script type="text/javascript">
    $(function(){
    		
    	var returnData = false;
    	$.ajax({
    	  type	: "get",
    	  url	: 'http://app.ka.com/m/config.php',
    	  data	: [],
    	  async	: false,
    	  success: function(data,textStatus,jqXHR){
    				returnData = data;
    				//console.log(returnData);
    			}
    	});//end ajax
    
    	var returnData = eval('(' + returnData + ')');
    	console.log(returnData);
    
    	var appId 		= returnData.appId;
    	var timestamp 	= returnData.timestamp;
    	var nonceStr 	= returnData.nonceStr;
    	var signature 	= returnData.signature;
    
    		  wx.config({
    			debug: true, //调试阶段建议开启
    			appId: appId,
    			timestamp: timestamp,
    			nonceStr: nonceStr,
    			signature: signature,
    			jsApiList: [
    				   /*
    					* 所有要调用的 API 都要加到这个列表中
    					* 这里以图像接口为例
    					*/
    				  "chooseImage",
    				  "previewImage",
    				  "uploadImage",
    				  "downloadImage",
    				  "scanQRCode"
    			]
    		  });
    				  
    			wx.ready(function() {
    			//alert(3);
    				wx.checkJsApi({
    					 jsApiList : ['scanQRCode','previewImage'],
    					 success : function(res) {
    		
    					 }
    				});
    				
    					$("img").click(function(){
    						var url = "http://app.ka.com/"+$(this).attr("src");
    						wx.previewImage({
    							current: url, // 当前显示图片的http链接
    							urls: [url] // 需要预览的图片http链接列表
    						});
    					});
    		
    			});
    		
    					  
    			wx.error(function(res){
    			
    				// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    				console.log(res);
    			});
    		
    		  
    });
    </script>

    2.服务端代码(获取config配置信息):

    <?php 
    date_default_timezone_set("Asia/Shanghai");
    
    $jssdk = new Jssdk();
    $signPackage = $jssdk->getSignPackage();
    echo json_encode($signPackage);exit;
    
    class Jssdk
    {
    	private $_CI;
    
        private $appId;
        private $appSecret;
    
        public function __construct($appId='wx666666', $appSecret='ee32') {
            $this->appId = $appId;
            $this->appSecret = $appSecret;
        }
    
        public function getSignPackage() {
            $jsapiTicket = $this->getJsApiTicket();
    
            // 注意 URL 一定要动态获取,不能 hardcode.
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    
            $timestamp = time();
            $nonceStr = $this->createNonceStr();
    
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    
            $signature = sha1($string);
    
            $signPackage = array(
                "appId"     => $this->appId,
                "nonceStr"  => $nonceStr,
                "timestamp" => $timestamp,
                "url"       => $url,
                "signature" => $signature,
                "rawString" => $string,
                'jsapiTicket' =>$jsapiTicket,
            );
            return $signPackage;
        }
    
        private function createNonceStr($length = 16) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i++) {
                $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            return $str;
        }
    
        private function getJsApiTicket() {
            // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
            $data = $this->get_php_file("jsapi_ticket");
            //echo $data['expire_time'].'------'.time();
            //print_r($data);exit;
    
            if (!isset($data['jsapi_ticket']) ||  (isset($data['expire_time'])  && $data['expire_time'] < time())) {
                //echo 1111;
                $accessToken = $this->getAccessToken();
                // 如果是企业号用以下 URL 获取 ticket
                // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
                $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
                //echo $url;
                $res = json_decode($this->httpGet($url), true);
    
                $ticket = isset($res['ticket']) ? $res['ticket'] : false;
                if ($ticket) {
                    $data['expire_time'] = time() + 7160;
                    $data['token_value'] = $ticket;
                    $this->set_php_file("jsapi_ticket", $data);
                }
            } else {
                //echo 22222;
                $ticket = $data['jsapi_ticket'];
            }
    
            return $ticket;
        }
    
        public function getAccessToken() {
            // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
            $data = $this->get_php_file("access_token");
            if (!isset($data['access_token']) ||  (isset($data['expire_time']) && $data['expire_time'] < time())) {
                // 如果是企业号用以下URL获取access_token
                // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
                $res = json_decode($this->httpGet($url));
                //var_dump($res);exit;
                $access_token = $res->access_token;
                if ($access_token) {
                    $data['expire_time'] = time() + 7160;
                    $data['token_value'] = $access_token;
                    $this->set_php_file("access_token", $data);
                }
            } else {
                $access_token = $data['access_token'];
            }
            return $access_token;
        }
    
        private function httpGet($url) {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 500);
            // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
            // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($curl, CURLOPT_URL, $url);
    
            $res = curl_exec($curl);
            curl_close($curl);
    
            return $res;
        }
    
        private function get_php_file($token_name) {
    		if(file_exists($token_name)) return false;
            return json_decode(file_get_contents($token_name), true);
        }
        private function set_php_file($token_name, $data) {
            $fp = fopen($token_name, "w");
            fwrite($fp, "<?php exit();?>" . json_encode($data));
            fclose($fp);
        }
    
    }
    /* End of file Jssdk.php */

     

     

    展开全文
  • 截图识别二维码软件(windows) 避免通过手机扫描,通过截屏识别二维码的内容,windows系统使用,一键截图识别二维码小公举。
  • 主要介绍了PHP生成二维码与识别二维码的方法,结合实例形式分析了php二维码相关概念、原理及生成、识别二维码相关操作技巧,并附带源码供读者下载参考,需要的朋友可以参考下
  • 主要为大家详细介绍了java使用电脑摄像头识别二维码,从摄像头获取图像,再根据图片解析出二维码信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了jQuery实现微信长按识别二维码的功能,非常不错,具有参考借鉴价值,对jquery长按识别二维码的相关知识感兴趣的朋友一起学习吧
  • qrcode_识别二维码.zip

    2020-09-17 09:45:30
    利用qt制作界面, 用opencv打开摄像头,qzxing识别二维码
  • zbar_识别二维码.zip

    2020-09-17 09:42:25
    利用qt制作界面, 用opencv打开摄像头,zbar识别二维码
  • 主要为大家详细介绍了Unity调用手机摄像机识别二维码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • IOS长按不识别二维码,出现放大图片的问题解决。 CSS加入样式: touch-callout: none; -webkit-touch-callout: none; -ms-touch-callout: none; -moz-touch-callout: none; 代码: <!DOCTYPE html> &...

    IOS长按不识别二维码,出现放大图片的问题解决。

    CSS加入样式:

    touch-callout: none; 
    -webkit-touch-callout: none; 
    -ms-touch-callout: none; 
    -moz-touch-callout: none;

    代码:

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<script type="text/javascript">
    			window.trkPageStart = new Date().getTime();
    		</script>
    		<meta charset="utf-8">
    		<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
    		<meta content="yes" name="apple-mobile-web-app-capable">
    		<meta content="black" name="apple-mobile-web-app-status-bar-style">
    		<meta content="telephone=no" name="format-detection">
    		<meta content="email=no" name="format-detection">
    		<meta name="description" content="不超过150个字符" />
    		<meta name="keywords" content="" />
    		<meta content="caibaojian" name="author" />
    		<title></title>
    		<script type="text/javascript" src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script>
    		<script>
    			// new VConsole(); //调试阶段
    		</script>
    		<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
    		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
    		<script src="https://cdn.bootcss.com/axios/0.19.0/axios.js"></script>
    		<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    		<!-- <script type="text/javascript" src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> -->
    		<style>
    			.wrap {
    				width: 100%;
    				padding-left: 10px;
    				margin: 0;
    				padding: 0;
    				height: 400px;
    			}
    			[v-cloak]{
    			    display: none;
    			}
    			.wug{
    				width: 120px;
    				height: 90px;
    				position: absolute;
    				right: 10px;
    				top: -110px;
    			}
    			.codePage {
    				position: fixed;
    				touch-callout: none; -webkit-touch-callout: none; -ms-touch-callout: none; -moz-touch-callout: none;
    				
    				width: 100%;
    				height: 100%;
    				top: 0;
    				left: 0;
    				opacity: 0;
    				z-index: 9999;
    			}
    
    			.jiaz {
    				text-align: center;
    				margin-top: 100px;
    				width: 100%;
    			}
    
    			.img11 {
    				width: 100%;
    			}
    
    			.img12 {
    				width: 100%;
    				position: absolute;
    				bottom: 50px;
    			}
    
    			* {
    				margin: 0;
    				padding: 0;
    			}
    
    			body {
    				background-color: #FFFFFF;
    			}
    
    			.top {
    				position: relative;
    				top: 0;
    				width: 100%;
    				overflow: hidden;
    			}
    
    			.head {
    				width: 100%;
    				z-index: 0;
    			}
    
    			.zuan {
    				animation: rotate 6s linear infinite;
    
    			}
    
    			.top_txt {
    				position: absolute;
    				/* background-color: rgba(0,0,0,0.2); */
    				background: linear-gradient(to bottom, rgba(0, 0, 0, 0.001), rgba(0, 0, 0, 0.3));
    				bottom: 0;
    				width: 100%;
    				color: white;
    				padding-left: 30px;
    				padding-top: 60px;
    				z-index: 1;
    				letter-spacing: 3px;
    			}
    
    			img {
    
    				border: 0;
    				vertical-align: bottom;
    			}
    
    			.position {
    				letter-spacing: 2px;
    				color: #e4e5e5;
    			}
    
    			.name {
    				font-weight: 400;
    				font-size: 26px;
    				margin-top: 6px;
    				padding-bottom: 16px;
    			}
    
    			.ms {
    				position: absolute;
    				top: 20px;
    				right: 20px;
    				width: 1.8rem;
    				height: 1.8rem;
    				z-index: 999;
    			}
    
    			@keyframes rotate {
    				0% {
    					transform: rotateZ(0deg);
    					/*从0度开始*/
    				}
    
    				100% {
    					transform: rotateZ(360deg);
    					/*360度结束*/
    				}
    			}
    
    			.sss {
    				position: absolute;
    				bottom: 0;
    				width: 100%;
    			}
    
    			.code {
    				width: 100px;
    				height: 100px;
    				margin-top: 14px;
    				margin-right: 14px;
    				-moz-box-shadow: 0px 1px 18px #dfdfdf;
    				-webkit-box-shadow: 0px 1px 18px #dfdfdf;
    				box-shadow: 0px 1px 18px #dfdfdf;
    
    			}
    
    			.code1 {
    				width: 100px;
    				height: 100px;
    				margin-top: 14px;
    				-moz-box-shadow: 0px 1px 18px #dfdfdf;
    				-webkit-box-shadow: 0px 1px 18px #dfdfdf;
    				box-shadow: 0px 1px 18px #dfdfdf;
    				position: absolute;
    				top: 20px;
    				right: 20px;
    			}
    			.erweima1{
    				position: absolute;
    				top: 133px;
    				right: 35px;
    				width: 100px;
    			}
    			.code2 {
    				top: 0px;
    				margin-top: 14px;
    					width: 100px;
    					height: 100px;
    			}
    
    			.centent {
    				
    				background-color: white;
    				position: relative;
    				background-size: 100%;
    				/* background-size: 80%; */
    				color: #474747;
    				height: 18rem;
    			}
    
    			.centent2 {
    				background-color: white;
    				position: relative;
    				background-size: 100%;
    				/* background-size: 80%; */
    				color: #474747;
    				height: 18rem;
    			}
    			.rig_logo{
    				position: absolute;
    				top: 0px;
    				right: 0;
    				width: 100%;
    				z-index: 1;
    			}
    			.rig_logo1{
    				z-index: 0;
    			}
    			.logo {
    				position: absolute;
    				right: 0;
    				top: 0;
    				height: 260px;
    				
    			}
    			.centent_block{
    				position: relative;
    				z-index: 2;
    				height: 400px;
    			}
    			.bottom_txt {
    				color: #dfdfdf;
    				width: 100%;
    				position: relative;
    				bottom: 0;
    				height: 50px;
    				line-height: 50px;
    				text-align: center;
    			}
    
    			.img133 {
    				position: relative;
    				margin-bottom: 20px;
    				width: 20px;
    				line-height: 40px;
    				text-align: center;
    				left: 50%;
    				margin-left: -10px;
    				
    			}
    
    			.centent_txt {
    				margin-bottom: 5px;
    				font-size: 16px;
    				width: 70%;
    				text-overflow: -o-ellipsis-lastline;
    				overflow: hidden;
    				text-overflow: ellipsis;
    				display: -webkit-box;
    				-webkit-line-clamp: 2;
    				line-clamp: 2;
    				-webkit-box-orient: vertical;
    
    			}
    
    			.centent_txt1 {
    				margin-bottom: 7px;
    				font-size: 16px;
    				width: 50%;
    				text-overflow: -o-ellipsis-lastline;
    				overflow: hidden;
    				text-overflow: ellipsis;
    				display: -webkit-box;
    				-webkit-line-clamp: 2;
    				line-clamp: 2;
    				-webkit-box-orient: vertical;
    			}
    
    			.lou_b {
    				position: absolute;
    				bottom: 0;
    				width: 80%;
    				left: 10%;
    				z-index: 0;
    			}
    			.app{
    				background-color: #fff;
    			}
    			.erweima{
    				color: #cfcfcf;font-size: 12px;
    				width: 100px;
    				text-align: center;
    				margin-top: 10px;
    				
    			}
    		</style>
    
    	</head>
    
    	<body>
    		<div id="app" class="app" v-cloak>
    			<div v-if="!template_type" class="jiaz">加载中 ···</div>
    			<di class="wrap" v-if="template_type">
    
    				<img class="codePage" :src="myCard.qrCode">
    				<div v-if="template_type==1">
    					<div class="top">
    						<img class="ms" :class="[rotate?'zuan ms':'ms']" :src="ms_url" @click="click_v">
    						<img class="head" v-if="myCard.avatarOpen==1" :src="myCard.avatar || 'https://xxx/static/de_head.jpg'">
    						<img class="head" v-else src="https://xxx.cn/static/de_head.jpg" />
    						<div class="top_txt">
    							<div class="position" v-if="myCard.positionOpen == 1 && myCard.position">{{ myCard.position }}</div>
    							<div class="name">{{ myCard.name }}</div>
    						</div>
    					</div>
    					<div class="centent">
    						<div class="centent_block" style="margin-left: 30px;">
    							<div class="centent_txt" style="padding-top: 32px">{{myCard.corpName}}</div>
    							<div class="centent_txt" v-if="myCard.mobileOpen == 1 && myCard.mobile">{{myCard.mobile}}</div>
    							<div class="centent_txt1" v-if="myCard.addressOpen == 1 && myCard.address">{{myCard.address}}</div>
    							<img class="code code1" :src="myCard.qrCode">
    							<div class="centent_txt erweima erweima1" style="">长按识别二维码</div>
    						</div>
    						<img class="rig_logo rig_logo1" src="https://xxx.cn/work/weixin/file/png17.png">
    					</div>
    				</div>
    
    				<div v-if="template_type==2">
    					<div class="top">
    						<img class="ms" :class="[rotate?'zuan ms':'ms']" :src="ms_url" @click="click_v">
    						<img class="head " v-if="myCard.avatarOpen==1" :src="myCard.avatar || 'https://xxx.cn/static/de_head.jpg'">
    						<img class="head " v-else src="https://xxx.cn/static/de_head.jpg" />
    						<div class="top_txt">
    							<div class="position" v-if="myCard.positionOpen == 1 && myCard.position">{{ myCard.position }}</div>
    							<div class="name">{{ myCard.name }}</div>
    						</div>
    					</div>
    					<div class="centent2">
    						<img src="https://xxx/file/card/weein_5g.png" class="wug">
    						<div style="margin-left: 24px; position: relative; width: 90%;z-index: 2;">
    
    							<div class="centent_txt" style="padding-top: 28px">{{myCard.corpName}}</div>
    							<div class="centent_txt" v-if="myCard.mobileOpen == 1 && myCard.mobile">{{myCard.mobile}}</div>
    							<div class="centent_txt" v-if="myCard.addressOpen == 1 && myCard.address">{{myCard.address}}</div>
    							<img class="code code2" :src="myCard.qrCode">
    							<div class="centent_txt erweima" style="">长按识别二维码</div>
    
    						</div>
    						<img class="rig_logo" src="https://xxx/weixin/file/png18.png">
    					</div>
    				</div>
    		</div>
    
    		<div v-if="template_type" class="bottom_txt">愿您感受我的真心,请加我企业微信</div>
    		<img v-if="template_type" class="img133" src="https://xxx/file/card/weein_logo.png">
    		</div>
    		<script>
    			var audio = "";
    			window.onload = function() {
    				//const vConsole = new VConsole(); //调试阶段
    				window.vm = new Vue({
    					el: '#app',
    					data: {
    						template_type: false,
    						myCard: {},
    						// template_type: 2,
    						// myCard:{"address":"你你你你你破热热","addressOpen":1,"avatar":"https://xxx/2020-06-09_66875b24-3020-40f8-9334-08effc521777.png","avatarOpen":1,"backgroundMusic":"1254343664029798400","backgroundMusicFileUrl":"https://qiyewechat.189.cn:8080/work/weixin/file/nv7.mp3","backgroundMusicName":"请加我企业微信女声版","backgroundMusicPicUrl":"","backgroundPic":"1254771577548050432","backgroundPicUrl":"https://qiyewechat.189.cn:8080/work/weixin/file/card/b2_1.png","corpId":"wwe094a1deac86058c","corpName":"码多多","createTime":"2020-06-05 11:41:11","email":"","emailOpen":0,"id":"1268387294411382784","mobile":"13977284413","mobileOpen":1,"name":"a_靖","position":"前端开发","positionOpen":1,"qrCode":"https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=vc1fe76c763b8b15b4","templateId":"1252576158818635776","templateName":"模板2","templatePreviewUrl":"https://qiyewechat.189.cn:8080/work/weixin/file/card/t2.png","updateTime":"2020-06-12 11:42:39","userId":"a_Jing","userid":"cdce4068a0f579517d73ec2106a0501bdaedf91ac6ab7d80"},
    						ms_url: 'https://xxxweixin/file/png26.png',
    						rotate: true,
    					},
    					created() {
    						let that = this;
    						that.loading = true;
    						let inviteId = that.getQueryVariable('id');
    						console.log('inviteId', inviteId)
    						setTimeout(() => {
    							console.log('------', this.template_type)
    						}, 500)
    						if (inviteId) {
    							axios.post(`${window.location.origin}/v1/businesscard/getH5MyCard/${inviteId}.do`).then(res => {
    								res = res.data;
    								console.log('==========', res)
    								if (res.success) {
    									this.myCard = res.module.myCard;
    									audio = new Audio(res.module.myCard.backgroundMusicFileUrl);
    									if (res.module.myCard.templateId == "1252576158818635776") {
    										this.template_type = 1;
    									} else {
    										this.template_type = 2;
    									}
    									that.getConfig();
    								} else {
    									that.error = res.errorMsg;
    									setTimeout(() => {
    										that.error = null;
    									}, 1000)
    								}
    							}).finally(() => {
    								that.loading = false;
    							})
    						}
    					},
    					methods: {
    						click_v() {
    							console.log('asasas')
    							if (this.rotate) {
    								this.rotate = false;
    								this.ms_url = "https://xxx/weixin/file/png25.png"
    								this.voiceClose()
    							} else {
    								this.rotate = true;
    								this.ms_url = "https://xxxfile/png26.png"
    								this.voicePaly()
    							}
    						},
    						voicePaly() {
    							console.log('循环播放,播放结束继续播放')
    							audio.play();
    							// 循环播放,播放结束继续播放
    							$(audio).unbind("ended").bind("ended", function() {
    								audio.play();
    							})
    							// audio.play();
    							this.rotate = true;
    							this.ms_url = "https://xxx/work/weixin/file/png26.png"
    						},
    						voiceClose() {
    							audio.pause();
    							this.rotate = false;
    							this.ms_url = "https://xxx/work/weixin/file/png25.png"
    						},
    						//获取url参数
    						getQueryVariable(variable) {
    							var query = window.location.search.substring(1);
    							var vars = query.split("&");
    							for (var i = 0; i < vars.length; i++) {
    								var pair = vars[i].split("=");
    								if (pair[0] == variable) {
    									return pair[1];
    								}
    							}
    							return '';
    						},
    						//获取jssdk配置
    						getConfig() {
    							var that = this;
    							axios.get(`${window.location.origin}/v1/invite/getConfig.do`, {
    									params: {
    										url: encodeURIComponent(window.location.href.split('#')[0])
    									}
    								})
    								.then(function(response) {
    									console.log(response);
    									const {
    										data
    									} = response;
    									if (data.success) {
    										let info = JSON.parse(data.module.config);
    										wx.config({
    											debug: false, // 开启调试模式
    											appId: info.appId, // 必填,公众号的唯一标识
    											timestamp: info.timestamp, // 必填,生成签名的时间戳
    											nonceStr: info.nonceStr, // 必填,生成签名的随机串
    											signature: info.signature, // 必填,签名
    											jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData'] // 必填,需要使用的JS接口列表
    										});
    										wx.ready((res) => {
    											console.log('初始化成功');
    											that.voicePaly()
    											console.log(wx.updateAppMessageShareData, wx.updateTimelineShareData);
    											var wx_title = "请加我企业微信";
    											var wx_desc = "我是您的专属服务顾问,我来自中国电信,请加我企业微信,hello 5G充满诚信";
    
    											wx.updateAppMessageShareData({
    												title: wx_title, // 分享标题
    												desc: wx_desc, // 分享描述
    												link: window.location.href, // 分享链接
    												imgUrl: 'https://xxx/work/weixin/file/card/5g.png', // 分享图标
    												type: 'link', // 分享类型,music、video或link,不填默认为link
    												dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
    												success: function() {
    													// 用户确认分享后执行的回调函数
    												},
    												cancel: function() {
    													// 用户取消分享后执行的回调函数
    												}
    											});
    											wx.updateTimelineShareData({
    												title: wx_title, // 分享标题
    												link: window.location.href, // 分享链接
    												imgUrl: 'https://xxx/work/weixin/file/card/5g.png', // 分享图标
    												success: function() {
    													// 用户确认分享后执行的回调函数
    												},
    												cancel: function() {
    													// 用户取消分享后执行的回调函数
    												}
    											});
    										})
    										wx.error(function(res) {
    											console.log('失败');
    										});
    									}
    								})
    								.catch(function(error) {
    									// handle error
    									console.log(error);
    								})
    								.then(function() {
    									// always executed
    								});
    						}
    
    					}
    				})
    			}
    		</script>
    	</body>
    	
    	<div id=app></div>
    	 <script type="text/javascript">
    		window.trkPageEnd = new Date().getTime();
    		window.trkArea = "bj";
    	</script>
    	<script type="text/javascript" src="https://www.189.cn/client/wap/common/js/s_code.js"></script>
    </html>
    

     

    展开全文
  • Python 识别二维码 及图像中色块颜色识别,根据阈值可以滤除波动情况的 干扰 Python recognizes the color of two-dimensional code and color block in image. According to the threshold value, the ...
  • ===============生成二维码============== /** 生成二维码,生成条形码 // =======生成二维码======== // // 主要用到CIFilter类。CIFilter是Core Image中一个比较核心的有关滤镜使用的类。 // 通常CIFilter...

     

    ===============生成二维码==============

    /**
    生成二维码,生成条形码
     //    =======生成二维码========
     //
     //    主要用到CIFilter类。CIFilter是Core Image中一个比较核心的有关滤镜使用的类。
     //    通常CIFilter对象需要一个或多个图像作为输入,并产生CIImage类型的实体作为输出。而这些输出图像的生产过程需要我们通过设置一些参数来实现,而这些参数的设置和检索都是利用键/值对的形式进行操作的。
     //    其中CIFlilter承载着所有设置好的滤镜参数以CIImage为基础,在CIContext对象中进行渲染。要提一下的是滤镜的使用是可以叠加的,我们可以使用多种滤镜处理同一个图像。Core Image的渲染分为CPU和GPU两种,其中使用CPU渲染可以在后台进行,但是渲染速度没有GPU快,而GPU是不能进行后台渲染的它是实时的,在进行视频帧渲染时我们就可以使用GPU进行渲染。
     //
     
     使用:
     //不带图片的二维码图片
     let imageViewIcon1 = UIImageView(frame:CGRect(x: 20, y: 100, width: 100, height: 100))
     imageViewIcon1.image = UIViewController.createQRForString(qrString: "https://www.baidu.com", qrImageName: "")
     self.view.addSubview(imageViewIcon1)
     //带图片的二维码图片
     let imageViewIcon2 = UIImageView(frame: CGRect(x: 200, y: 100, width: 100, height: 100))
     imageViewIcon2.image = UIViewController.createQRForString(qrString: "https://www.baidu.com", qrImageName: "appstart")
     self.view.addSubview(imageViewIcon2)
     */
    
    import UIKit
    
    class LYBErweimaExtention: UIViewController {
    
    
        
    
        
    override func viewDidLoad() {
    
        
        }
    }
    
    extension UIViewController{
    class func createQRForString(qrString: String?, qrImageName: String?) -> UIImage?{
            if let sureQRString = qrString{
                let stringData = sureQRString.data(using: String.Encoding.utf8, allowLossyConversion: false)
                //创建一个二维码的滤镜
                let qrFilter = CIFilter(name: "CIQRCodeGenerator")
                qrFilter?.setValue(stringData, forKey: "inputMessage")
                qrFilter?.setValue("H", forKey: "inputCorrectionLevel")
                let qrCIImage = qrFilter?.outputImage
                // 创建一个颜色滤镜,黑白色
                let colorFilter = CIFilter(name: "CIFalseColor")!
                colorFilter.setDefaults()
                colorFilter.setValue(qrCIImage, forKey: "inputImage")
                colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
                colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")
                // 返回二维码image
                let codeImage = UIImage(ciImage: (colorFilter.outputImage!.transformed(by: CGAffineTransform(scaleX: 5, y: 5))))
                // 中间一般放logo
                if let iconImage = UIImage(named: qrImageName!) {
                    
                    let rect = CGRect(x: 0, y: 0, width: codeImage.size.width, height: codeImage.size.height)
                    UIGraphicsBeginImageContext(rect.size)
                    codeImage.draw(in: rect)
                    let avatarSize = CGSize(width: rect.size.width*0.25, height: rect.size.height*0.25)
                    let x = (rect.width - avatarSize.width) * 0.5
                    let y = (rect.height - avatarSize.height) * 0.5
                    iconImage.draw(in: CGRect(x: x, y: y, width: avatarSize.width, height: avatarSize.height))
                    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
                    UIGraphicsEndImageContext()
                    return resultImage
                }
                return codeImage
            }
            return nil
        }
        
        
        
        //生成条形码
    class func generateBarCode(messgae:NSString,width:CGFloat,height:CGFloat) -> UIImage {
            var returnImage:UIImage?
            if (messgae.length > 0 && width > 0 && height > 0){
                let inputData:NSData? = messgae.data(using: String.Encoding.utf8.rawValue)! as NSData
                // CICode128BarcodeGenerator
                let filter = CIFilter.init(name: "CICode128BarcodeGenerator")!
                filter.setValue(inputData, forKey: "inputMessage")
                var ciImage = filter.outputImage!
                let scaleX = width/ciImage.extent.size.width
                let scaleY = height/ciImage.extent.size.height
                ciImage = ciImage.transformed(by: CGAffineTransform.init(scaleX: scaleX, y: scaleY))
                returnImage = UIImage.init(ciImage: ciImage)
            }else {
                returnImage = nil;
            }
            return returnImage!
        }
        
    
    }
    

     

     

    =========长按识别二维码=========

     

    /**
         ===========长按识别二维码=========
     */
    import UIKit
    
    import AVFoundation
    
    import SafariServices
    
    class LYBLongTapErweimaViewController: UIViewController,UIGestureRecognizerDelegate {
    
        var imageView:UIImageView?
        override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor=UIColor.white
            navigationItem.title="长按识别"
            longPressRecogErwema()
        }
      func longPressRecogErwema() {
     imageView = UIImageView(frame:CGRect(x: 20, y: 100, width: 100, height: 100))
        imageView!.image = UIViewController.createQRForString(qrString: "https://www.baidu.com", qrImageName: "")
        imageView?.isUserInteractionEnabled=true//这句户一定要打开,否则不能交互
        self.view.addSubview(imageView!)
        
        //长按识别二维码
        let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(QRLongPress(gesture:)))
        longPress.delegate=self
         longPress.minimumPressDuration = 1
        imageView!.addGestureRecognizer(longPress)
         }
        //这个代理需要实现,否则长按手势不识别
        func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
            return true
        }
     //MARK: - 长按二维码识别
        @objc func QRLongPress(gesture: UILongPressGestureRecognizer) {
            if (gesture.state == UIGestureRecognizer.State.began) {
                
                //截图再读取
                UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,true, 0);
                
                let connect:CGContext = UIGraphicsGetCurrentContext()!;
                
                self.view.layer.render(in: connect)
                
                let   image : UIImage  = UIGraphicsGetImageFromCurrentImageContext()!;
                UIGraphicsEndImageContext();
                let  ciImage:CIImage = CIImage.init(cgImage: image.cgImage!)
                let   ciContext:CIContext = CIContext.init(options: [CIContextOption.useSoftwareRenderer:true])//软件渲染
     //1.初始化扫描仪,设置设别类型和识别质量
        let options = [CIDetectorAccuracy : CIDetectorAccuracyHigh]
        let detector: CIDetector = CIDetector.init(ofType: "CIDetectorTypeQRCode", context: ciContext, options: options)!
      //2.扫描获取的特征组
                let features = detector.features(in: ciImage)
                //3.获取扫描结果
         let feature = features[0] as! CIQRCodeFeature
         let scannedResult = feature.messageString
          //4.获取之后的操作---根据扫描结果中的数据进行具体的操作
         print(scannedResult!)
            } else if (gesture.state == UIGestureRecognizer.State.ended) {
                
           }
       }
        
    }
    

    ===========扫描二维码==============

    /**
     扫描二维码
     */
    import UIKit
    
    import AVFoundation
    
    import SafariServices
    
    class LYBScanErweimaviewController: UIViewController,AVCaptureMetadataOutputObjectsDelegate{
        //    =========扫描二维码========
        //
        //    参考(二维码生成和识别):http://blog.csdn.net/qq_30970529/article/details/52233292
        //
        //    二维码扫描主要用AVFoundation。AVFoundation是一个很大基础库,用来创建基于时间的视听媒体,可以使用它来检查,创建、编辑或媒体文件。也可以输入流从设备和操作视频实时捕捉和回放。
        //    主要成员介绍:
        //    AVCaptureSession 管理输入(AVCaptureInput)和输出(AVCaptureOutput)流,包含开启和停止会话方法。
        //    AVCaptureDeviceInput 是AVCaptureInput的子类,可以作为输入捕获会话,用AVCaptureDevice实例初始化。
        //    AVCaptureDevice代表了物理捕获设备如:摄像机。用于配置等底层硬件设置相机的自动对焦模式。
        //    AVCaptureMetadataOutput是AVCaptureOutput的子类,处理输出捕获会话。捕获的对象传递给一个委托实现AVCaptureMetadataOutputObjectsDelegate协议。协议方法在指定的派发队列(dispatch queue)上执行。
        //    AVCaptureVideoPreviewLayerCALayer的一个子类,显示捕获到的相机输出流。
        
        
        var session:AVCaptureSession?//会话,用于协调输入输出
        var output:AVCaptureMetadataOutput?//输出
        var input:AVCaptureDeviceInput?//输入
        var layer:AVCaptureVideoPreviewLayer?//特殊的layer,用于展示搜索到的内容---
        var recImageView:UIImageView?//矩形框
        var lineImageView:UIImageView?//闪动的线
        var timer:Timer?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor=UIColor.white
            navigationItem.title="扫描二维码"
            saomiaoErweima()
            
        }
        //判断相机的权限
        func testCamera() {
            let authorizationStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
            switch authorizationStatus {
            case .notDetermined:
                AVCaptureDevice.requestAccess(for: AVMediaType.video) { (genter) in
                    if (genter){
                        print("去打开相机")
                    }else{
                        print(">>>访问受限")
                    }
                }
                break
            case .authorized:
                print("去打开相机")
                break
            case .restricted:
                print(">>>访问受限")
                break
            case .denied:
                print(">>>访问受限")
                break
            }
        }
        //打开相机扫描
        func saomiaoErweima(){
            //打开相机
            let device=AVCaptureDevice.default(for: AVMediaType.video)
            //创建输入流
            input = try?AVCaptureDeviceInput.init(device: device!)
            //创建输出流
            output=AVCaptureMetadataOutput.init()
            //设置代理在主线程里刷新
            output?.setMetadataObjectsDelegate(self as AVCaptureMetadataOutputObjectsDelegate, queue: DispatchQueue.main
            )
            //设置扫描区域,这个需要仔细调整
    //        output?.rectOfInterest=CGRect.init(x: 50, y: 50, width: 200, height: 200)
            //初始化链接对象,连接输入输出
            session=AVCaptureSession.init()
            //高质量采集率
            session?.sessionPreset=AVCaptureSession.Preset.high
            session?.addInput(input!)
            session?.addOutput(output!)
            //设置扫码支持的编码格式
    output?.metadataObjectTypes=[AVMetadataObject.ObjectType.qr,AVMetadataObject.ObjectType.ean13,AVMetadataObject.ObjectType.ean8,AVMetadataObject.ObjectType.code128,AVMetadataObject.ObjectType.qr]
            
            layer=AVCaptureVideoPreviewLayer.init(session: session!)
            layer?.videoGravity=AVLayerVideoGravity.resizeAspectFill
            layer?.frame=self.view.layer.bounds
            self.view.layer.addSublayer(layer!)
            setline()//添加扫框
            
            //开始扫描
            session?.startRunning()
        }
        //设置最上面的框和跳动的线
        func setline(){
            //设置背景图片
            recImageView = UIImageView.init(image: UIImage.init(named: "pick_bg.png"))
            //设置位置到界面的中间
            recImageView?.frame = CGRect.init(x: view.bounds.size.width * 0.5 - 140, y: view.bounds.size.height * 0.5 - 140, width: 280, height: 280)
            //添加到视图上
            view.addSubview(recImageView!)
            //初始化二维码的扫描线的位置
            lineImageView=UIImageView.init(image: UIImage.init(named: "line.png"))
            lineImageView?.frame=CGRect.init(x:  self.view.bounds.size.width * 0.5 - 110, y: 10, width: 220, height: 2)
            view.addSubview(lineImageView!)
            //开启定时器
            timer=Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(animate), userInfo: nil, repeats: true)
        }
        @objc func animate() {
            UIView.animate(withDuration: 2, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: {
                self.lineImageView?.frame=CGRect.init(x: self.view.bounds.size.width * 0.5 - 110, y: self.view.bounds.size.height * 0.7, width: 220, height: 2)
            }) { (ist) in
                self.lineImageView?.frame=CGRect.init(x: self.view.bounds.size.width * 0.5 - 110, y: 10, width: 220, height: 2)
            }
        }
    //}
    
    
    
    /// 实现代理方法--获取数据
    
    //metadataObjects: 扫描到的数据
    
    //fromConnection: 连接
    
    //extension LYBScanErweimaviewController:AVCaptureMetadataOutputObjectsDelegate {
        func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
            //停止扫描
            session?.stopRunning()
            //删除特殊的layer
            layer?.removeFromSuperlayer()
            // //3. 获取数据
            //AVMetadataMachineReadableCodeObject:这个类如果不知道,可以打印一下
            let metadataObject = metadataObjects.first as! AVMetadataMachineReadableCodeObject
            var decodeMessage = ""
            switch metadataObject.type {
            case AVMetadataObject.ObjectType.code128:
                // 条形码
                decodeMessage = metadataObject.stringValue!
                break
            case AVMetadataObject.ObjectType.qr:
                // 二维码
                decodeMessage = metadataObject.stringValue!
                break
            case AVMetadataObject.ObjectType.ean13:
                // ISBN书号条码、EAN13码
                decodeMessage = metadataObject.stringValue!
                break
            default:
                break
            }
            print(decodeMessage)
            if(metadataObject.stringValue?.contains("http"))!{
                //4.1 创建SafariVC----如果要打开safari浏览器,需要引入import SafariServices
                let sfvc:SFSafariViewController=SFSafariViewController.init(url: URL.init(string: metadataObject.stringValue!
                    )!)
                //4.2 弹出SafariVC
                self.present(sfvc, animated: true, completion: {
                })
            }
        }
    }
    

    ========包含闪光灯二维码扫描====

    https://www.jianshu.com/p/96c40fb6e0b9

    展开全文
  • 长按识别二维码

    2020-08-06 18:03:31
    body{ user-select: auto; } img { pointer-events: all; width: 3.55rem; height: 3.55rem; /** img为二维码图片 **/ }
  • Qt调用摄像头识别二维码,可实现对各种二维码及条形码的识别,源码利用调用一个摄像头的和一个二维码图片进行识别识别
  • ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了...这篇文章主要给大家介绍了.NET C#利用ZXing生成、识别二维码/条形码的方法,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴。
  • 为了实现app扫描二维码,我想了很多办法,最后还是用原生的来挑战自己,下面是链接 http://www.html5plus.org/doc/zh_cn/barcode.html
  • 识别二维码,保存二维码
  • halcon识别二维码.zip

    2019-10-19 14:06:04
    这是在QT环境在调用Halcon的二维码识别库,实现二维码的解码,本工程可以在QT + Halcon的环境正常运行。
  • 主要介绍了iOS模仿微信长按识别二维码的两种方式,文章第二种方式是识别网页中的二维码,具体思路详解大家参考下本
  • VB.NET识别二维码专业源码.rar。什么也不多说,直接附源码。识别快速且专业。不依赖网络资源。希望对你有帮助。下载后记得给好评哦。
  • JS识别二维码、JS生成二维码

    万次阅读 2018-06-30 16:28:37
    最近的项目中使用到了识别二维码和生成二维码,都是用JS生成的,应用在了移动端,在网上搜罗了许多进行验证,下面是我在项目中应用的: 识别二维码 1.JS文件和测试页面压缩包:...
  • 方式一:长按识别二维码 #import "LYBLongPressRecognizeEwmVC.h" #import "UIImageView+CreatCode.h" /** 补充的iOS9新特性*/ #import <SafariServices/SafariServices.h> @interface LYBLongPres
  • 本文要使用Android WebView实现长按保存图片及长按识别二维码功能,当用户在浏览网页的时候,长按某一区域,识别如果是图片,则弹出弹框,出现保存图片的功能
  • 最近有个需求,扫码获取在微信中识别二维码直接跳转到指定的打卡圈,下面来介绍下如何实现这个功能。 分享海报的绘制保存教程点击这里 这里是引用 ...
  • 主要介绍了微信小程序webview实现长按点击识别二维码功能,结合实例形式分析了webview二维码识别相关操作技巧,需要的朋友可以参考下
  • 对gbk编码汉字的识别后是乱码,对utf-8编码的汉字可识别,部分二维码不能识别。 希望此代码对使用C#开发摄像头和二维码应用的人有用。 如果希望将解码信息发送到指定服务器,有服务器端处理信息的请留言。

空空如也

1 2 3 4 5 ... 20
收藏数 7,339
精华内容 2,935
关键字:

识别二维码