您现在的位置是:首页 >技术教程 >Python学习之生成带logo背景图的二维码(静态和动态图)网站首页技术教程
Python学习之生成带logo背景图的二维码(静态和动态图)
前言
二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明。现随着智能手机的普及,已广泛应用于平常生活中,例如商品信息查询、社交好友互动、网络地址访问等等。
尽管二维码应用渐趋广泛,但与日韩等国相比,中国的二维码发展还远远不够。制约因素除了运营商的支持度外,还有技术、终端适配、盈利模式等方面。炒得很火热的是二维码与O2O(Online To Offline)模式的结合,即利用二维码的读取将线上的用户引流给线下的商家。腾讯很看好这个模式,马化腾称"二维码是线上线下的一个关键入口"。尽管有些人不看好二维码的应用,但无可否认,只要培养了足够多的用户群,再结合良好的商业模式,二维码将成为桥接现实与虚拟最得力的工具之一。
Python代码是怎么生成二维码的
这里介绍两种方法:
1、qrcode模块
qrcode模块是Github上的一个开源项目,提供了生成二维码的接口。qrcode默认使用PIL库用于生成图像。由于生成 qrcode 图片需要依赖 Python 的图像库,所以需要先安装 Python 图像库 PIL(Python Imaging Library)。
2、MyQR模块
MyQR是一个能够产生基本二维码、艺术二维码(黑白与彩色)和动态效果二维码(黑白与彩色)的Python第三方库。
MyQR 库的更多介绍和源码访问 https://github.com/x-hw/amazing-qr
模块安装问题
运行代码报错:ModuleNotFoundError: No module named ‘MyQR’
pip install MyQR
qrcode模块生成的二维码
注意:logo图不要
太大,不然生成之后logo可能会挡住二维码的内容,导致扫不出来。
下面看实现代码:
from PIL import Image
import qrcode, os
def create_qrcode(url, qrcodename):
qr = qrcode.QRCode(
version=1, # 设置容错率为最高
error_correction=qrcode.ERROR_CORRECT_H, # 用于控制二维码的错误纠正程度
box_size=8, # 控制二维码中每个格子的像素数,默认为10
border=1, # 二维码四周留白,包含的格子数,默认为4
)
qr.add_data(url) # QRCode.add_data(data)函数添加数据
qr.make(fit=True) # QRCode.make(fit=True)函数生成图片
img = qr.make_image()
img = img.convert("RGBA") # 二维码设为彩色
logo = Image.open("images/逃逸的卡路里.png") # 传gif生成的二维码也是没有动态效果的
w,h = img.size
logo_w,logo_h = logo.size
l_w = int((w - logo_w) / 2)
l_h = int((h - logo_h) / 2)
logo = logo.convert("RGBA")
img.paste(logo, (l_w, l_h), logo)
img.show()
img.save(os.getcwd() + "/images/" + qrcodename + ".png", quality=100)
def main():
url = input("请输入文本或URL:")
qrcodename = input("请输入生成二维码的名称:")
create_qrcode(url,qrcodename)
if __name__ == '__main__':
main()
参数详解: | |
---|---|
version=None | 一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可 |
error_correction=constants.ERROR_CORRECT_M | 二维码的纠错范围,可以选择4个常量:1. ERROR_CORRECT_L 7%以下的错误会被纠正2. ERROR_CORRECT_M (default) 15%以下的错误会被纠正3. ERROR_CORRECT_Q 25 %以下的错误会被纠正4. ERROR_CORRECT_H. 30%以下的错误会被纠正 |
box_size=10 | 控制二维码中每个小格子包含的像素数 |
border=4 | 控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值) |
image_factory=None | 选择生成图片的形式,默认为PIL图像 |
mask_pattern=None | 选择生成图片的的掩模 |
效果图展示:
MyQR模块生成静态或动态背景的二维码
代码示例:
from MyQR import myqr
import os
text = input("请输入文本或url:")
save_name = input("请输入生成二维码的名称:")+".png"
myqr.run(
words=text, #在命令后输入链接或者句子作为参数,然后在程序的当前目录中产生相应的二维码图片文件,默认命名为” qrcode.png“
version=1, #设置容错率为最高默认边长是取决于你输入的信息的长度和使用的纠错等级;而默认纠错等级是最高级的H
level='H', #控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture="images/逃逸的卡路里.png", #用来将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片
colorized=True, #可以使产生的图片由黑白(False)变为彩色(True)的
contrast=1.0, #用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。
brightness=1.0, #用来调节图片的亮度,其余用法和取值与 -con 相同
save_name=save_name, #控制文件名,格式可以是 .jpg, .png ,.bmp ,.gif ;
save_dir=os.getcwd() + "/images/"
)
参数:
words:文本或链接
version:改变生成二维码图片的大小;范围(1~40)
picture: 指定生成二维码的背景图
colorized:只有两个参数,True为彩色,Flase为灰色
level :范围只有:‘L’,‘M’,‘Q’,‘H’;控制纠错水平
contrast :调节背景图片的对比度,只能给予float类型的参数
brightness:调节背景图片的亮度,如果参数值过大,背景图将会变为白色;只能给予float类型的参数
save_name:保存的格式只有:’.jpg’,‘.png’, ‘.bmp’, '.gif’等四种格式,路径可以使用绝对路径和相对路径。
save_dir:存储路径
静态图展示
动态图展示
总结
以上就是Python代码对二维码生成处理的示例,根据不同需求可以选择qrcode模块或者MyQR模块来实现,希望对看到的小伙伴有帮助作用。