python生成二维码

时间:2021-07-09 18:15:39   收藏:0   阅读:142
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(‘‘)
img.save("qr2.png")

?

技术分享图片

qrcode生成二维码还可以做更多定制:

import qrcode 
data = ‘‘
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 = ‘‘
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=‘‘, picture=‘I:\\29.jpg‘,colorized=True)#输出文件名可以默认生成

技术分享图片

图片还可以设置为动图,也可以对二维码做更多定制:

from MyQR import myqr
myqr.run(
 ? ?words=‘‘,
 ? ?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

技术分享图片

?

原文:https://blog.51cto.com/u_15296426/3030018

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!