一、前言一维条形码,就是我们日常所说的条形码(Barcod),常见于食品包装上。它是将宽度不等的多个黑条和空白,按一定的编码规则排列,用以表达一组信息的图形标识符。常见的一维条形码是由黑条(简...
一、前言
一维条形码,就是我们日常所说的条形码(Barcod),常见于食品包装上。它是将宽度不等的多个黑条和空白,按一定的编码规则排列,用以表达一组信息的图形标识符。常见的一维条形码是由黑条(简称条)和白条(简称空)排成平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期以及图书分类号、邮件起止地点、类别、日期等信息。通常一维条形码所能表示的字符集不过 10 个数字、26个英文字母及一些特殊字符,条码字符集最大所能表示的字符个数为 128 个 ASCII 字符,信息量非常有限。二维码( 2 − Dimensional Barcode),又称二维条形码。它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形来记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或www.cppcns.com光电扫描设备自动识读以实现信息自动处理。
二维码有其特定的字符集,每个字符占有一定的宽度,每种码具有一定的校验功能,同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。二维条形码是在二维空间水平和竖直方向存储信息的条形码。它的优点是信息容量大,译码可靠性高,纠错能力强,制作成本低,保密与防伪性能好。
常见的二维码为 QR Code,QR全称是Quick Response,是一个近几年来移动设备上超流行的一种编码方式。它的结构如下:

QR Code属于矩阵式二维条码,又称棋盘式二维条码。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。
主要有以下特点:
信息容量大:能存储 7089 个数字字符或 4296 个字母字符或 2953 个 8 位字节字符或 1817 汉字字符;
纠错能力强:即使部分编码变脏或破损,也可以恢复数据。L级约可纠错 7% 的数据码字,M级约可纠错 15% 的数据码字,Q级约可纠错25%的数据码字,H级约可纠错 30% 的数据码字;
可以从任意方向读取:QR码可以从 360 任一方向均可快速读取。通过 QR 码中的三处定位图案,可以帮助 QR 码不受背景样式的影响,实现快速稳定的读取。
二、MyQR
MyQR可以生成常见的二维码、艺术二维码(黑白或彩色),动态二维码(黑白或彩色),安装命令如下:
pip install MyQR -i http://pypi.douban.com/simple --trusted-host pypi.douban.com


更多详细内容可以参考官方文档:https://github.com/sylnsfar/qrcode
from MyQR import myqr
import os
version, level, qr_name = myqr.run(
'https://yetingyun.blog.csdn.net/',
version=1,
level='H',
picture=None,
colorized=False,
contrast=1.0,
brightness=1.0,
save_name='test01.png',
save_dir=os.getcwd()
)
print(version, level, qr_name)
运行结果如下:
4
H
D:\python\pycharm2020\program\archievement\用Python制作二维码\test01.png
程序运行会在当前目录下生成一个名称为 test01.png 的二维码。如果 myqr 后面传入的是普通字符串,那么扫描后会现在字符串。若是一个网址,扫描后会自动跳转。
需要注意的是:这里的字符串不能指定中文,myqr不支持中文,有中文需要得用 QRCode 库,否则会抛出 ValueError(‘Wrong words! Make sure the characters are supported!') 的异常。

# -*- coding: UTF-8 -*-
"""
@File :demo.py
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
from MyQR import myqr
import os
version, level, qr_name = myqr.run(
'https://yetingyun.blog.csdn.net/', # 二维码的内容
version=10, # 1−40,控制二维码的大小,默认是1 11,即21 21 21\times212121
level='H',
picture='test_004.gif', # 图片的文件名,默认为空,即生成的二维码是普通的二维码
colorized=True, # 默认是False,即生成的二维码是黑白的
contrast=1.0, # 对比度,默认是1.0 1.01.0
brightness=1.0, # 亮度,默认是1.0 1.01.0
save_name='test04.gif', # 输出的文件名,比如test.png
save_dir=os.getcwd() # 输出的文件路径,默认为当前路径
)
print(version, level, qr_name)

三、qrcode
qrcode的功能虽稍逊于MyQR,但是它支持中文字符,且能生成矢量图,安装命令如下:
pip install qrcode -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

官方文档 Github 网址:https://github.com/lincolnloop/python-qrcode
制作一个简单二维码
import qrcode
img = qrcode.make('欲买桂花同载酒,终不似,少年游。')
img.save('002.png')
img.show()

制作一个带logo,自定义颜色的二维码
# -*- coding: UTF-8 -*-
"""
@File :demo4.py
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
import qrcode
from PIL import Image
import matplotlib.pyplot as plt
def getQRcode(data, file_name):
qr = qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=5,
border=4,
)
# 添加数据
qr.add_data(data)
# 填充数据
qr.make(fit=True)
# 生成图片 设置填充色 背景色
img = qr.make_image(fill_color="purple", back_color="white")
# 添加logo,打开logo照片
icon = Image.open("logo1.png")
# 获取图片的宽高
img_w, img_h = img.size
# 参数设置logo的大小
factor = 5
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
# 重新设置logo的尺寸
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
# 得到画图的x,y坐标,居中显示
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
# 黏贴logo照
img.paste(icon, (w, h), mask=None)
# 保存img
img.save(file_name)
# 终端显示图片
plt.imshow(img)
plt.axis('off')
plt.show()
return img
if __name__ == '__main__':
words = '''
其实努力也没那么辛苦
想着以后的日子可以过得那样平静和有力量
可以一步步靠近喜欢的人
可以轻松拥有自己喜欢的东西
就能在疲惫的生活中找到甜
'''
getQRcode(words, 'my.png')

注:文中生成的二维码均绿色、健康,仅用作学习之用,可以放心扫。
以上就是python 使用MyQR和qrcode来制作二维码的详细内容,更多关于python用MyQR和qrcode来制作二维码的资料请关注我们其它相关文章!










