QRCode生成二维码
qrcode.QRCode
通过 qrcode.QRCode 方法,可以设定二维码的大小、容错率、颜色...等:
参数 | 说明 |
---|---|
box_size | 一个方块的边长为几个像素,默认为 10。 |
border | 边框宽度,默认为 4 ( 最小为 4 )。 |
error_correction | 容错率,数值为 ERROR_CORRECT_L ( 7% )、ERROR_CORRECT_M ( 15%,默认 )、ERROR_CORRECT_Q ( 25% )、ERROR_CORRECT_H ( 30% )。 |
version | 尺寸大小 ( 重复排列次数 ),数值为 1~40,默认为 1(21x21的矩阵)。 |
使用 qrcode.QRCode 必须搭配 add_data、make 和 make_image 三个方法
make_image 能改变 QRCode 输出的颜色,fill_color 表示 QRCode 填充颜色,back_color 是背景色
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
qr.add_data('Python QRCode Test') # # 要转换的文字
qr.make(fit=True) # 生成QRCode图像
img = qr.make_image(fill_color="red", back_color="black") # 产生 QRCode图片
img.show() # 显示图片
img.save('qrcode.png') # 存储图片
QRCode 输出 SVG 格式
需要导入 qrcode.image.svg,在 qrcode.QRCode 或者 make_image() 里加入 image_factory=qrcode.image.svg.SvgPathImage
import qrcode
import qrcode.image.svg
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
image_factory=qrcode.image.svg.SvgPathImage
)
qr.add_data('Python QRCode Test')
qr.make(fit=True)
img = qr.make_image()
#img.show() # SVG无法使用
img.save('qrcode.svg') # 存储图片
个性化 QRCode
版本 7.2 以上的 qrcode ,提供五种个性化造型 QRCode的功能:
名称 | 说明 |
---|---|
SquareModuleDrawer() | 默认方格 |
GappedSquareModuleDrawer() | 小方格 |
CircleModuleDrawer() | 圆点 |
RoundedModuleDrawer() | 圆角方格 |
VerticalBarsDrawer() | 竖线 |
HorizontalBarsDrawer() | 横线 |
個性化 QRCode 需要导入 StyledPilImage 和个性化造型函数,载入后在 make_image 方法中进行设定,就能产生个性化 QRCode,但是个性化 QRCode无法使用 fill_color 和 back_color,且不支持 SVG 格式
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import VerticalBarsDrawer,RoundedModuleDrawer,HorizontalBarsDrawer,SquareModuleDrawer,GappedSquareModuleDrawer,CircleModuleDrawer
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
qr.add_data('Python QRCode Test')
qr.make(fit=True)
img1 = qr.make_image(image_factory=StyledPilImage, module_drawer=SquareModuleDrawer())
img2 = qr.make_image(image_factory=StyledPilImage, module_drawer=GappedSquareModuleDrawer())
img3 = qr.make_image(image_factory=StyledPilImage, module_drawer=CircleModuleDrawer())
img4 = qr.make_image(image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer())
img5 = qr.make_image(image_factory=StyledPilImage, module_drawer=VerticalBarsDrawer())
img6 = qr.make_image(image_factory=StyledPilImage, module_drawer=HorizontalBarsDrawer())
QRCode 加入渐进色或背景图片
应用于版本 7.2 以上的 qrcode ,需导入StyledPilImage 和渐进填色函数,就能给QRCode 加入漂亮的渐进颜色,共有六种填色方式,例如红色 (255,0,0),绿色 (0,255,0),蓝色 (0,0,255):
渐进填色方式 | 参数 | 说明 |
---|---|---|
SolidFillColorMask() | (背景、填充) | 默认填满颜色 |
RadialGradiantColorMask() | (背景、中心、四周) | 圆形放射渐进 |
SquareGradiantColorMask() | (背景、中心、四周) | 方形放射渐进 |
VerticalGradiantColorMask() | (背景、上方、下方) | 垂直渐进 |
HorizontalGradiantColorMask() | (背景、左侧、右侧) | 水平渐进 |
ImageColorMask() | (背景、图片地址) | 图片填充 |
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers import RoundedModuleDrawer
from qrcode.image.styles.colormasks import SolidFillColorMask, RadialGradiantColorMask, SquareGradiantColorMask, VerticalGradiantColorMask, HorizontalGradiantColorMask, ImageColorMask
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
qr.add_data('Python QRCode Test')
qr.make(fit=True)
img1 = qr.make_image(image_factory=StyledPilImage, color_mask=SolidFillColorMask((255,255,255),(255,0,0)), module_drawer=RoundedModuleDrawer())
img2 = qr.make_image(image_factory=StyledPilImage, color_mask=RadialGradiantColorMask((255,255,255),(255,0,0),(0,0,255)), module_drawer=RoundedModuleDrawer())
img3 = qr.make_image(image_factory=StyledPilImage, color_mask=SquareGradiantColorMask((255,255,255),(255,0,0),(0,0,255)), module_drawer=RoundedModuleDrawer())
img4 = qr.make_image(image_factory=StyledPilImage, color_mask=VerticalGradiantColorMask((255,255,255),(255,0,0),(0,0,255)), module_drawer=RoundedModuleDrawer())
img5 = qr.make_image(image_factory=StyledPilImage, color_mask=HorizontalGradiantColorMask((255,255,255),(255,0,0),(0,0,255)), module_drawer=RoundedModuleDrawer())
img6 = qr.make_image(image_factory=StyledPilImage, color_mask=ImageColorMask((255,255,255),'logo.jpg'), module_drawer=RoundedModuleDrawer())
QRCode 加入 logo
导入StyledPilImage后,可以使用 embeded_image_path 在 QRCode 的中心填加 logo,加入的图片会被压缩成正方形
注意,如果要加入图片,容错率必须设定 ERROR_CORRECT_Q 或 ERROR_CORRECT_H。
import qrcode
from qrcode.image.styledpil import StyledPilImage
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_Q,
box_size=10,
border=4
)
qr.add_data('Python QRCode Test')
qr.make(fit=True)
img = qr.make_image(image_factory=StyledPilImage, embeded_image_path='logo.jpg')
img.save('qrcode.png')