vlambda博客
学习文章列表

趣味python-二维码神器








摘要:今天要给大家分享的干货是生成二维码的神器。主要介绍了两种,一种是(估)简(计)易(你)版(们)的(也)二(看)维(不)码(上),还有一种就是进阶版的。请赶紧拿麻袋来打包带走,不用客气。



三成功力生成的二维码

Code如下,比较简单,扫一眼就行了:
 1'''
2
3# Copyright:PisCO菜鸟成长 
4# Author: cainiao_001
5# Date:2020-08-01
6# Description:test
7#
8'''

9#!/usr/bin/python 
10# -*- coding: UTF-8 -*- 
11
12import qrcode
13
14data = 'https://www.baidu.com/' # 二维码内容(链接地址或文字)
15img = qrcode.make(data=data)    # 生成二维码
16img.show()                      # 显示二维码
17#img.save('saveqr.jpg')         # 保存二维码
效果图如下:

趣味python-二维码神器

成功了,是不是很简单?几行代码就搞定了。感兴趣的小伙伴可以尝试扫描这个二维码,显示的是百度页面。当然,想要自己试试的话,先安装qrcode库:

1pip install qrcode
不用猜都知道,你们肯定在吐槽这个二维码比较单一,通俗地讲就是丑。说实话,我也觉得 趣味python-二维码神器     好,那就马上开始下一阶段的修炼。



五成功力生成的二维码

这次,我们将会制作一个以纯白为背景色+蓝宝石二维码+图片logo的合体版二维码。code来了,你品,你细细地品:
 1'''
2
3# Copyright:PisCO菜鸟成长 
4# Author: cainiao_001
5# Date:2020-08-01
6# Description:test
7#
8'''
9#!/usr/bin/python 
10# -*- coding: UTF-8 -*- 
11
12from PIL import Image
13import qrcode
14
15qr = qrcode.QRCode(
16    version=2,
17    error_correction=qrcode.constants.ERROR_CORRECT_H,
18    box_size=12,
19    border=3,
20    image_factory=None,
21    mask_pattern=None,
22)
23
24qr.add_data('https://www.baidu.com/')
25qr.make(fit=True) # 启用二维码颜色设置
26
27#填充背景色为白色,二维码主体色为蓝色
28img = qr.make_image(fill_color='blue', back_color='white')
29img = img.convert("RGBA")          #将二维码图像转化为RGBA格式,为32位彩色图像
30
31icon = Image.open("D:\\lufei.png"#打开logo照片
32img_w, img_h = img.size            #获取二维码图片的宽高
33
34#设置logo的大小
35denominator = 3                    #logo将占整个二维码面积的1/3
36size_w = int(img_w / denominator)
37size_h = int(img_h / denominator)
38icon_w, icon_h = icon.size
39if icon_w > size_w:
40    icon_w = size_w
41if icon_h > size_h:
42    icon_h = size_h
43
44#重新设置logo的尺寸,将其缩放为icon_w*icon_h大小
45icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
46w = int((img_w - icon_w) / 2)      #计算二维码中心处的坐标
47h = int((img_h - icon_h) / 2)
48icon = icon.convert("RGBA")        #将logo转化为RGBA格式
49
50img.paste(icon, (w, h),icon)       #将logo图片粘贴到二维码中央
51img.show()

效果图如下:

趣味python-二维码神器

其实不难,相关注释已在code当中。不过还是有几点要多叨叨一下:
  • 若将30~50行注释掉将会仅显示一张白底蓝色二维码图片。也就是说,30~50行在做的事情就是将lufei.png图片转化后,粘贴在二维码的中心;
  • logo的大小能不能设置成占整个二维码面积的1/2?答:不能。通俗地讲,二维码和lufei.png是两个不同的图片,将两个图片叠加在一起将会掩盖一部分二维码,就可能造成二维码无法识别。所以,这里有个容错率的概念。
  • 下载新的库PIL,用于处理图像:

1pip install PIL
还有几个属性和二维码容错率参数,请look look下表:
参数名称
参数含义
version
二维码的大小,1-40。1为21*21,40为177*177
box_size
二维码中每个格子的像素数,默认为10
border
二维码四周留白包含的像素数,默认为4
image_factory
选择生成图片的形式,默认为PIL图像
mask_pattern
选择生成图片的的掩模
error_correction
二维码纠错级别,默认为ERROR_CORRECT_M
ERROR_CORRECT_L:<= 7%的错误被更正
ERROR_CORRECT_M:<= 15%的错误被更正
ERROR_CORRECT_Q:<=25%的错误被更正
ERROR_CORRECT_H:<= 30%的错误被更正


九成功力生成的二维码

上面的代码太复杂?好好好,产品经理都没有你这么挑剔!现在就来生成个简洁又好看的二维码:
 1'''
2# Copyright:PisCO菜鸟成长 
3# Author: cainiao_001
4# Date:2020-08-01
5# Description:test
6#
7'''

8#!/usr/bin/python 
9# -*- coding: UTF-8 -*- 
10
11from MyQR import myqr   #注意大小写
12
13myqr.run(
14    words='http://www.baidu.com/',#扫描二维码后,显示的内容,或是跳转的链接
15    version=5,                    #设置容错率
16    level='H',                    #控制纠错水平,范围是L、M、Q、H,从左到右依次升高
17    picture='D:\\lufei.png',      #图片所在目录,可以是动图
18    colorized=True,               #黑白(False)还是彩色(True)
19    contrast=1.0,                 #用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
20    brightness=1.0,               #用来调节图片的亮度,用法同上。
21    save_name='D:\\Python.png'    #控制输出文件名
22)
效果图如下:

趣味python-二维码神器

我敢肯定,你们肯定还想要更有趣的,比如说动图二维码。那就把珍藏多年的女神图片贡献出来满足你们一下下吧:

趣味python-二维码神器

方法就是,给第17行picture参数选择一个.gif动图即可你们那么聪明,其他的就不再过多解释了。笔者还赶着去吃小龙虾。另外,注意pip一下新的库

1pip install MyQR


总结

  • 使用qrcode库生成的二维码,简单明了,库中可用的属性不多。

  • MyQR库可用动图来生成二维码,代码也更加简洁。

  • 生成二维码时都需要考虑容错率,避免无法识别的问题。

end




往期推荐