python生成二维码
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。
二维码一共有40个Version,Version 规定了二维码的尺寸,Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29x29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)x4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。
QR码从360°任一方向均可快速读取。其奥秘就在于QR码中的3处定位图案,可以帮助QR码不受背景样式的影响,实现快速稳定的读取。
二维码中有四种级别的纠错(Error Correction Code Level),这就是为什么二维码有残缺还能扫出来,以及为什么有人在二维码的中心位置加入图标还能扫出来。
错误修正容量 | |
---|---|
L水平 | 7%的字码可被修正 |
M水平 | 15%的字码可被修正 |
Q水平 | 25%的字码可被修正 |
H水平 | 30%的字码可被修正 |
如何选定version?
例如,需要输入的数据为100位的数字时,通过以下步骤来选定。
python模块之qrcode
二维码中可以写入任何内容,包括文字、网址链接等。
qrcode模块安装很简单:
pip install qrcode
下面的代码生成一个二维码,扫描和会显示文字“川普大统领是懂王!”:
#coding=gbk
import qrcode
img = qrcode.make('川普大统领是懂王!')
img.save("qr1.png")
也可以在二维码中写入网站链接,扫描后会自动跳转到该网站:
import qrcode
img = qrcode.make('https://blog.csdn.net/Dillon2015')
img.save("qr2.png")
qrcode生成二维码还可以做更多定制:
import qrcode
data = 'https://blog.csdn.net/Dillon2015'
img_file = r'qr3.png'
# 实例化QRCode生成qr对象
#version: 整数,范围为1到40,表示二维码的大小(最小值是1,是个21x21的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。
#error_correction: 二维码的纠错范围
#boxsize: 每个方块中的像素个数
#border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4
qr = qrcode.QRCode(
version=1,#
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(data)
qr.make(fit=True)
# 生成二维码
#fill_color和back_color可以改变二维码前景和背景颜色
img = qr.make_image(fill_color="green", back_color="black")
# 保存二维码
img.save(img_file)
由于二维码有纠错功能,还可以在二维码中间贴上图像(类似于微信二维码),可以通过PIL库的img.paste函数实现。
import qrcode
from PIL import Image
data = 'https://blog.csdn.net/Dillon2015'
img_file = r'qr5.png'
# 实例化QRCode生成qr对象
#version: 整数,范围为1到40,表示二维码的大小(最小值是1,是个21x21的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。
#error_correction: 二维码的纠错范围
#boxsize: 每个方块中的像素个数
#border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4
qr = qrcode.QRCode(
version=1,#
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(data)
qr.make(fit=True)
# 生成二维码
#fill_color和back_color可以改变二维码前景和背景颜色
img = qr.make_image(fill_color="green", back_color="black")
# 获取二维码的宽高
img_w, img_h = img.size
# 添加logo,打开logo图像
icon = Image.open("I:\\29.jpg")
# 参数设置logo的大小为二维码的1/6
factor = 6
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坐标,居中显示
x = int((img_w - icon_w) / 2)
y = int((img_h - icon_h) / 2)
# 黏贴logo照
img.paste(icon, (y, y), mask=None)
# 保存二维码
img.save(img_file)
python模块之myqr
myqr依赖于imageio,只支持python3:
pip install myqr
生成带图片的二维码,此为彩色图片代码,需要黑白图片就去掉参数colorized=True:
from MyQR import myqr
myqr.run(words='https://blog.csdn.net/Dillon2015', picture='I:\\29.jpg',colorized=True)#输出文件名可以默认生成
图片还可以设置为动图,也可以对二维码做更多定制:
from MyQR import myqr
myqr.run(
words='https://blog.csdn.net/Dillon2015',
version=1,
level='H', # 控制纠错水平
picture='2.gif', # 动图
colorized=True, # 黑白(False),彩色(True)
contrast=1.0, # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
brightness=1.0, # 用来调节图片的亮度,用法同上。
save_name='qr4.gif', # 控制输出文件名,格式可以是 .jpg, .png ,.bmp ,.gif
)
感兴趣的请关注微信公众号Video Coding