让你的电脑也识得二维码图片(一)

  • 开始
  • 改进
  • 再改进
  • 再加个小功能
  • 最后

开始

昨日突发奇想,想在电脑上实现二维码图片的识别解码。因此查了点资料决定用python的pyzbar包写一个二维码解码的脚本。
首先pip安装pyzbar库:

pip install pyzbar

掏出python写下了如下程序:

import os
import webbrowser
from PIL import Image
from pyzbar import pyzbardef decode_qr_code(code_img_path):if not os.path.exists(code_img_path):raise FileExistsError(code_img_path)return pyzbar.decode(Image.open(code_img_path), symbols=[pyzbar.ZBarSymbol.QRCODE])if __name__ == "__main__":src = input("输入二维码路径:")results = decode_qr_code(src)if len(results):if "http://" in results[0].data.decode("utf-8") or "https://" in results[0].data.decode("utf-8"):webbrowser.open(results[0].data.decode("utf-8"))print(results[0].data.decode("utf-8"))else:print("Can not recognize.")

嗯,还不错,只需要运行python脚本输入二维码路径就可以打开识别了,而且做了分类,对于纯文本直接打印,对于网址则使用webbrowser使用默认浏览器打开网址。

改进

虽然我觉得这个脚本还不错啦,可以实现二维码图片的识别解码了,但我觉得这个输入二维码图片路径不大方便(或许是我懒),还有就是每次运行都得找到这个python脚本,着实不大方便。
嗯,得想个办法无需找到python脚本就能直接执行,总不能放个python脚本在桌面吧太丑了。
突然我灵机一动想到了我们的右键菜单栏:

这玩意儿多方便啊,只需要找到二维码图片,然后右击打开菜单栏,然后执行脚本文件就好啦。
立马动手查找资料,看到右键菜单栏添加项需要修改注册表,嗯,按下win+r
输入regedit回车打开注册表编辑器,到计算机\HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\目录下新建一个项叫Recognize Qrcode(自己取的名字,会显示到右键菜单栏中,上图中有),然后再在Recognize Qrcode/下新建一个command项,双击名称修改其中的数值数据,起初我填的是(注意是英文 "):

D:\Python\test\demo.py “%1”

退出注册表编辑器后右键图片确实可以出现新添加的Recognize Qrcode,但单击执行却提示:

哦豁,无法直接执行python脚本,查阅网上资料发现,可以写个.bat文件然后去执行python脚本,即将之前填写的数值数据改成(注意是英文 "):

D:\Python\test\demo.bat “%1”

然后偷学一点批处理命令写了个.bat文件:

@echo off
cd  d:\Python\test
d:
python demo.py %*
pause

然后再次测试,果然能够成功通过右键菜单运行python脚本了。

再改进

虽然解决了去寻找python脚本的麻烦,但是还是得手动输入图片路径,这还是好麻烦,能不能在右键菜单运行python脚本的时候直接获取到图片的路径呢。
好的,继续查资料,查了半天还是把目光盯到了右键上,经过一番搜索,发现:

右键的同时系统是会提取到图片的路径的

呦吼,这不就是我想要的嘛。接着开始修改代码:

import os
import sys
import webbrowser
from PIL import Image
from pyzbar import pyzbardef decode_qr_code(code_img_path):if not os.path.exists(code_img_path):raise FileExistsError(code_img_path)return pyzbar.decode(Image.open(code_img_path), symbols=[pyzbar.ZBarSymbol.QRCODE])if __name__ == "__main__":# 修改此处直接从系统得到了路径src = sys.argv[1].replace('\\', '/').replace('"', '')results = decode_qr_code(src)if len(results):if "http://" in results[0].data.decode("utf-8") or "https://" in results[0].data.decode("utf-8"):webbrowser.open(results[0].data.decode("utf-8"))print(results[0].data.decode("utf-8"))else:print("Can not recognize.")

测试运行成功。

再加个小功能

既然右键的时候系统已经能获取到路径了,这不给我们平时复制文件路径提供了一个新思路嘛,按照如上流程可以写一个在右键菜单栏中直接获取到文件路径的脚本,将获取到的路径发送到剪切板中(提一句windows的剪切板真香,建议win+v打开)。
为了测试这个想法,我在这个二维码解码的脚本中也加入了这个功能。
使用subprocess将获取到的路径发到剪切板中:

import os
import subprocess
import sys
import webbrowser
from PIL import Image
from pyzbar import pyzbardef decode_qr_code(code_img_path):if not os.path.exists(code_img_path):raise FileExistsError(code_img_path)return pyzbar.decode(Image.open(code_img_path), symbols=[pyzbar.ZBarSymbol.QRCODE])if __name__ == "__main__":# 添加此处将获取到的文件路径发送到剪切板cmd = 'echo ' + sys.argv[1].strip().replace('"', '') + '|clip'subprocess.check_call(cmd, shell=True)# 修改此处直接从系统得到了路径src = sys.argv[1].replace('\\', '/').replace('"', '')results = decode_qr_code(src)if len(results):if "http://" in results[0].data.decode("utf-8") or "https://" in results[0].data.decode("utf-8"):webbrowser.open(results[0].data.decode("utf-8"))print(results[0].data.decode("utf-8"))else:print("Can not recognize.")

经测试完美实现此功能。

最后

这个二维码识别功能还比较简陋,只能识别单张二维码,且图片必须保存到本地,还有较大的改进空间。
有更新想法的可以在评论提出。
源码及后续改进将发布在此地址https://gitee.com/HWHfile/recognize-qrcode

让你的电脑也识得二维码图片(一)相关推荐

  1. 让你的电脑也识得二维码图片(二)

    让你的电脑也识得二维码图片(二) 继续 主要问题 获取图片 新的思路 实现 右键 最后 继续 之前写了一份能够让电脑识别二维码图片的脚本,详细参见<让你的电脑也识得二维码图片(一)> 虽然 ...

  2. 使用电脑微信扫描二维码

    使用电脑微信扫描二维码 将二维码图片发送至文件传输助手 在与文件传输助手的聊天界面点开图片,右键,点击识别图中二维码即可 扫描完成.

  3. 电脑端扫描二维码(java)

    说明:js调去电脑摄像头拍照,然后获取图片base64位编码,再将base64为编码转为bolb,通过定时异步上传到后台,在后台对图片文件进行解码,返回解码结果到页面,然后页面重新加载结果(url) ...

  4. 电脑生成永久二维码怎么弄的?二维码图案不变怎么改内容?

    很多小伙伴经常会因为工作需要制作二维码图片,常见的有做视频二维码.音频二维码.文件二维码等等,但是可能有的二维码会具备一定的时效性,那么如果想要制作使用永久二维码该如何制作呢?想要生成永久的二维码内容 ...

  5. 微信突发闪退 BUG,罪魁祸首竟是一张神奇的二维码图片

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! ​ 建议别尝试:转发这个二维码到群里,3秒后你会回来骂我(抖m求骂) 近日,网传微信识别上方二维码就会出现闪退BU ...

  6. Excel二维码图片生成器

    Excel二维码图片生成器. 它可以将excel文件的数据,每行数据生成一张二维码图片,并保存到电脑.软件无需安装,解压后即可直接使用,无需联网,操作简便快捷. 下载地址:点此下载 步骤1:导入事先制 ...

  7. 看似简单的任务-分享二维码图片到微信(分享图片的生成)

    1.任务描述 大体场景是这样的:移动支付中的被扫模式(收款方生成二维码)的二维码分享给好友进行识别支付:考虑到模板样式的多端一致性.多样性.可配置性等特点,所以生成分享图片的功能有java服务端进行实 ...

  8. java生成二维码,读取(解析)二维码图片

    二维码分为好多种,我们最常用的是qrcode类型的二维码,以下有三种生成方式以及解析方式: 附所需jar包或者js地址 第一种:依赖qrcode.jar import java.awt.Color; ...

  9. 怎么做出牛逼的二维码图片?

    怎么做出牛逼的二维码图片?当然不是黑白两色的那种二维码图片了,要牛逼,要图形化,场景化.游戏化,一起看看牛逼的二维码图片是怎么做出来的吧! 我曾经以为,二维码就是这样的 或者是这样的 好看一点的也不过 ...

最新文章

  1. vs-halcon-大恒相机配置
  2. msm8937+android7.1系统播放某个MP4文件在data分区下创建ramdump并生成很多elf文件问题
  3. doc es 中type_Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
  4. element vue 上传模板_vue+element 文件上传
  5. Centos6.5硬盘故障修复
  6. 轻量级RTSP服务存在的意义
  7. json和python中字典的区别和联系_Python中 json字符串和字典的区别
  8. iis ftp 隔离账户
  9. HDU2833 最短路 floyd
  10. SVM多分类的几种方式
  11. 计算机设计大赛物联网专项赛专栏
  12. 【经典递归问题 汉诺塔 求解】
  13. ai面试的优缺点_AI面试是什么?有哪些特点呢?
  14. java判断天数_Java判断两个日期相差天数的方法
  15. Perf -- Linux下的系统性能调优工具,第 2 部分
  16. woocommerce 分类到菜单_WooCommerce实用代码集合
  17. js:身份证号码脱敏(对中间11位号码用*号替换)
  18. c语言,判断整数 m 是否素数
  19. python 统计文件夹下的文件夹/某类型文件的数目
  20. 经济学里的那些字母都代表的意思

热门文章

  1. eclipse中java都乱码怎么办_eclipse中的java代码出现乱码怎么办
  2. 瑞星卡卡助手爆重大bug OE用户损失惨重
  3. python实现轨迹回放_记录鼠标的轨迹并回放的js代码
  4. 旅游网站竞品分析—携程旅行网VS去哪儿网(上)
  5. 《计算机视觉 : 计算理论与算法基础》(马颂德 张正友)扫描版[PDF]
  6. 第五篇 Data Feeds(2)使用GenericCSVData加载数据
  7. CCF201412-1门禁系统(C语言)
  8. 轴承热处理,你了解吗?
  9. 固态硬盘启动计算机时间,示例:利用SSD固态硬盘缩短启动时间
  10. SpringBoot打包部署成Windows服务的详细步骤