讲解开源项目:用 Python 生成有“灵魂”的二维码

本文作者:HelloGitHub-LITTLECHIEH
这是 HelloGitHub 推出的《讲解开源项目》系列,今天给大家推荐一个 Python 开源生成二维码的项目——qrcode
一、介绍
1.1 二维码
二维码又称二维条码,常见的二维码为 QR Code,QR 全称 Quick Response。是一个近几年来移动设备上超流行的一种编码方式,在现在的生活中二维码随处可见。我们可以用它支付、浏览网站等,为什么他会这么流行?下面说几个特点:
- 可存储的信息量大:可容纳多达 1850 个大写字母或 2710 个数字或 1108 个字节或 500 多个汉字。
- 容错能力强:具有纠错功能,这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达 30% 仍可恢复信息。
- 译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。
- 激光可识别。
比如我们现在常见的公众号二维码,他就利用了二维码容错能力强的特点,在二维码中间加入了公众号的图标。虽然中间的图片遮盖了一部分二维码的真实数据,但因为其强大的容错能力,所以并没有影响二维码要传递的数据。
1.2 二维码的组成

一图胜千言,好了这里二维码的基本知识就介绍完成了。
1.3 生成二维码库
二维码是一个很方便的传递信息的载体,但是像上面黑白的二维码感觉非常缺少‘灵魂’。下面就介绍今天的主角:qrcode
这是一个由 Python 编写的二维码生成器,支持生成 GIF 动态、图片二维码,让你的二维码变得有趣起来。
二、qrcode 库的优点
为什么需要使用到这个二维码生成器来生成二维码呢?
- 使用简单:快速上手,仅需 2 行代码,即可开始使用!
- 在二维码中增加图片:可以让用户通过二维码中的图片,初步了解该二维码是和什么东西有关。(该二维码加入了 HG 的 logo)

- 在二维码中增加动图:通过动图,让二维码活过来。

- 使用方式多样:有以下的 3 种使用方式
- 命令行方式
- 导入文件方式(import)
- 可执行文件
- 用就对了:我不要你觉得,我要我觉得 滑稽
三、快速上手
演示环境
操作系统:Windows | Python 版本:3.5
3.1 安装
我们通过 Python 的 pip 包管理工具进行安装:
pip install myqr
注:此处可能需要升级 pip,升级命令
pip install --upgrade pip
安装完成之后,就可以直接在命令行中使用了!下面逐一讲解各种二维码的生成方法
3.2 普通二维码
首先生成一个普通二维码
打开 cmd
输入命令
myqr https://github.com -n helloword.png
参数
-n:生成二维码的文件名
这样就会得到一个二维码图片,生成的图片保存在了当前目录,后面可以通过传入参数修改默认目录。
3.3 彩色二维码
先准备一张图片放在目录下(方形的图片效果最好)

将图片名称修改为 github.jpg(后缀根据自己的照片格式而定)
在命令行中输入:
myqr https://github.com -n mypicture.png -p github.jpg -c
参数:
-n:生成二维码的名称-p:二维码加入的图片,支持 jpg、gif、png 格式-c:选择是否生成彩色二维码,如果不设置默认为黑白- 更多参数请看下面附录部分
3.4 动态二维码
步骤和彩色二维码的方法一致,但是需要注意:
- 增加图片为 gif
- 修改生成二维码的后缀为 gif
四、附录
4.1 MyQR 参数
从官方文档整理的常用参数如下:
-n:生成二维码的名称-p:二维码加入的图片,支持.jpg、.gif、.png、.bmp格式-c:选择是否生成彩色二维码,如果不设置默认为黑白-v:控制边长,范围是 1 至 40,数字越大边长越大-l:控制纠错水平,范围是 L、M、Q、H 从左到右依次升高-d:控制输出二维码的存储位置-con:用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为 1.0-bri:用来调节图片的亮度,其余用法和取值与-con相同
4.2 cmd 切换盘符
打开命令行有个小技巧,可以将 cmd 迅速切换到想要的目录,避免了切换盘符的麻烦:
利用文件管理,找到目标文件夹
顶部地址栏输入 cmd,然后‘回车‘

- 切换盘符的坑:直接切换盘符会失败

4.3 二维码分类介绍
二维码有以下几种分类
黑白和彩色码
- 黑白码
- 彩色码
融合和视觉码
- 融合码:就是将内容与二维码融合使它们成为一个整体,图片由二维码组成,二维码就是图片的一部分。这种比较适合使用构造简单的图片或者文字做美化主体内容
- 视觉码:以图片为背景,再在图片上构建很多特殊的点,这些点不会影响背景的视觉效果

艺术码
- 艺术二维码,就是将二维码进行的各个“码眼”按照设计师的构思进行分析、拆解、合并,再在那些“码眼”区域填充上一些小素材元素,最后形成一个别具特色二维码。

- 艺术二维码,就是将二维码进行的各个“码眼”按照设计师的构思进行分析、拆解、合并,再在那些“码眼”区域填充上一些小素材元素,最后形成一个别具特色二维码。
五、最后
以上就是本篇文章的全部内容了,相信你对二维码更加了解了。并且对 qrcode 库的常用参数有了一定了解,那就快去生成一个有趣、有‘灵魂’的二维码吧!
有好玩的库,但不会用,看着干着急?欢迎告诉我们,同时也欢迎加入我们。我们的愿景:
“让对开源感兴趣的人不再畏惧,开源项目的发起者不再孤单。”
六、参考资料
『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~
讲解开源项目:用 Python 生成有“灵魂”的二维码的更多相关文章
- 使用Python生成自己的特色二维码
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据 ...
- js生成带参的二维码
最近项目中有需求生成带参的二维码,考虑过用JAVA后台生成返回前端展示,后面了解到用jquery的qrcode.js插件可以很好现实 引入js: require.config({ baseUrl : ...
- 涛哥的Python脚本工具箱之生成带Logo的二维码
近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应 ...
- Python+Selenium学习笔记3 - 二维码生成
用qrcode模块生成二维码 # coding = utf-8 import qrcode qr = qrcode.QRCode( version=1, error_correction=qrcode ...
- .NET使用ZXing.NET生成中间带图片的二维码
很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...
- 利用WPF生成Q币充值二维码——扫码登录篇
一.前言 虽然腾讯官方不支持使用二维码充值Q币,但对于喜欢钻研的人来说这不是问题,本文利用WPF技术讲解从扫码登录到生成Q币充值二维码的一整套解决方案. 因为充值Q币需要先用QQ号登录官网.所以我们首 ...
- C# 生成 DataMatrix 格式的二维码
该文主要是利用OnBarcode.dll 生成 DataMatrix 格式的二维码的一些简单方法和操作技巧.关于QrBarcode的二维码比较常见和简单,网上有很多资源. 1.附件为dll 2.利用上 ...
- C#生成带logo的二维码
带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类 QRCode ...
- .NET生成带Logo的二维码
使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.C ...
随机推荐
- macOS 安装配置yaf框架 生成yaf项目
macOS 安装配置yaf框架 Yaf只支持PHP5.2及以上的版本. 并支持最新的PHP5.3.3 Yaf需要SPL的支持. SPL在PHP5中是默认启用的扩展模块 Yaf需要PCRE的支持. PC ...
- TextView 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...
- HBase MapReduce 一些 ClassNotFoundException 所缺少的jar包
我们在用 java 操作 HBase 时,可能会出现相关的 ClassNotFoundException 等异常信息,但是我们又不想把 HBase lib 下的所有jar包全部导入到工程,因为会有 ...
- .lib .dll 区别介绍、使用(dll的两种引入方式)
.lib .dll文件都是程序可直接引用的文件,前者就是所谓的库文件,后者是动态链接库(Dynamic Link Library)也是一个库文件.而.pdb则可以理解为符号表文件.DLL(Dynami ...
- 洛谷 P2158 [SDOI2008]仪仗队
题意简述 给定一个n,求gcd(x, y) = 1(x, y <= n)的(x, y)个数 题解思路 欧拉函数, 则gcd(x, y) = 1(x <= y <= n)的个数 ans ...
- 洛谷 P3648 [APIO2014]序列分割
题意简述 有一个长度为n的序列,分成k + 1非空的块, 选择两个相邻元素把这个块从中间分开,得到两个非空的块. 每次操作后你将获得那两个新产生的块的元素和的乘积的分数.求总得分最大值. 题解思路 f ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)
背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...
- Window服务基于Quartz.Net组件实现定时任务调度(二)
前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器). ...
- Vue的冒泡事件
由于业务需求需要,需要在一个元素中的子元素添加一个点击事件. 但是刚好父元素也有一个点击事件.这个时候我们就需要使用到Vue中的阻止事件冒泡了.
- vim文件时,误用了ctrl+z命令,该怎么办?
linux中,当正在使用vim命令编辑文件,退出时,如果误使用了 ctrl+z ,当前目录中会多一个隐藏文件. 比如我正在编辑 t.txt 文件时,误以为我之前使用的是 tail 命令,直接使用 ct ...