一般在我们的公众号都会有二维码提供扫描,但是,一般的二维码可以满足我们那种奇思妙想的胃口么?当然不能,我们需要一个炫酷、吸引人的二维码!!!
下面来看看怎么制作!
我的环境则是采用 win10 + python3
Github地址:https://github.com/sylnsfar/qrcode
中文文档:https://github.com/sylnsfar/qrcode/blob/master/README-cn.md
使用这个工具,可以让我们轻松制作出不少好看的二维码,下面来开始制作步骤。
# 通过 pip
pip(3) install myqr(or MyQR)
执行如下:
安装完毕之后,则可以执行 myqr 相关命令,如下:
(venv) D:\pythonProject\qrcode_test>myqr
usage: myqr [-h]
[-v {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}]
[-l {L,M,Q,H}] [-p PICTURE] [-c] [-con CONTRAST] [-bri BRIGHTNESS]
[-n NAME] [-d DIRECTORY]
Words
myqr: error: the following arguments are required: Words
(venv) D:\pythonProject\qrcode_test>
myqr https://github.com
执行如下:
可以看到默认会将输入的Words内容转化输出到一个命名为 qrcode.png 的图片上。
查看生产的二维码图片,如下:
现在你扫描一下这个二维码,那么则会提供访问 https://github.com 的地址了。
上面很多图片的信息都是采用默认,例如文件名 qrcode.png 、文件的后缀名 png 、文件的存储路径 等等。
但是其实我们大部分也不会太过在意,不过还是简单说明一下。
-n
控制文件名,格式可以是 .jpg
, .png
,.bmp
,.gif
;
-d
控制位置。上面的普通二维码真的很普通,为了让二维码更加好看,我们可以搜索一下比较好看的背景图片,然后将二维码嵌入,这样就比较炫酷了吧。
-p
用来将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片。首先我准备一张山水图作为背景图,如下:
执行命令如下:
myqr https://www.baidu.com/ -p bg1.jpg
效果如下:
但是我觉得这个效果不是很好看呢!!下面来一个彩色的看看。
-c
可以使产生的图片由黑白变为彩色的。myqr https://www.baidu.com/ -p bg1.jpg -c
效果如下:
恕我直言,我个人觉得还是不是很好看。下面来调整一下背景图的比例以及色调。
myqr https://www.baidu.com/ -p bg1.jpg -c -con 1.5 -bri 1.6
-con
用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。-bri
用来调节图片的亮度,其余用法和取值与 -con
相同。效果如下:
稍微好看了一点点,但是各位有没有觉得二维码的那个三个正方形有些大?主要的原因是默认使用背景的图片边长较短,整体被压缩,导致很不协调。
下面来设置一下背景图的边长以及识别纠错的参数。
myqr https://www.baidu.com/ -p bg1.jpg -c -con 1.5 -bri 1.6 -v 15 -l Q
-v
和 -l
参数。
-v
控制边长,范围是1至40,数字越大边长越大;
-l
控制纠错水平,范围是L、M、Q、H,从左到右依次升高。效果如下:
可以看出效果比较协调了吧。在这里要特别说明一下,这个 v 参数 和 l 参数是配置使用的,每次调整之后,最好都自己扫描一下二维码,确认能够识别出设置的内容信息,避免弄出一个不能使用的二维码。
上面都是讲一些制作静态图片的二维码,还不够我们所谓的炫酷,真正的炫酷当然是要能够动起来,不然怎么炫!!
其实动态二维码与上述的带图片的二维码的生成方法没什么区别,你只要采用 .gif
格式的图片即可生成黑白或者彩色的动态二维码。但注意如果使用了 -n
参数自定义输出的文件名,切记其格式也必须是 .gif
格式。
这里我准备一张蜘蛛侠的动图。
import os
from MyQR import myqr
def main():
version, level, qr_name = myqr.run(
words="https://www.baidu.com/",
version=20, # 控制边长,范围是**1至40**,数字越大边长越大;
level='H', # 设置图片的纠错等级 - 范围是**L、M、Q、H**,从左到右依次升高。
picture='bg2.gif', # 设置背景图片名称:bg2.gif
colorized=True, # 设置背景图片的色彩, False黑白, True彩色
contrast=1.0, # 设置图片的对比度
brightness=1.0, # 设置图片的亮度
save_name=None, # 设置图片保存的名称
save_dir=os.getcwd() # 设置图片保存的路径
)
if __name__ == '__main__':
main()
执行效果如下:
看看效果图,如下:
上面的确是已经做好了,但是这个二维码图片文件直接就非常大,下面来压缩一下。
pip install pillow
from PIL import Image, ImageSequence
import sys, os
def compress(inf, outf):
"""
:param inf: 需要压缩的原图片
:param outf: 输出压缩后的图片
:return:
"""
gif = Image.open(inf)
dura = gif.info['duration']
imgs = [f.copy() for f in ImageSequence.Iterator(gif)]
index = 0
imglist = []
os.mkdir("images")
for frame in imgs:
frame.save("./images/%d.png" % index)
im = Image.open("./images/%d.png" % index)
im.thumbnail((216, 216), Image.ANTIALIAS)
imglist.append(im)
index += 1
os.remove("images")
imglist[0].save(outf, 'gif', save_all=True, append_images=imglist[1:], loop=0, duration=dura)
if __name__ == '__main__':
compress(inf="bg2_qrcode.gif", outf="bg2_qrcode_cp.gif")
其实原理步骤就是将 gif 的每一帧动画图片拆分放置到临时文件夹 images 中进行逐个压缩,最后再将这些图片重装为一个 gif 图片,达到压缩的效果。
可以看到 gif 图片被压缩到了 (216, 216) 的大小。