python生成二维码

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

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值