今天给大家带来一个简单的Python应用实验:生成个性二维码。
实验内容:通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小、是否在现有图片的基础上生成、是否生成动态二维码。主要面向Python3初学者。
知识点Python3基础
MyQR库
可以实现:普通二维码
动态二维码
所需实验环境一、实验准备
创建环境打开终端,进入Code目录,并将其作为我们的工作目录。
$cdCode下载MyQR
$sudopip3installMyQR下载所需资源文件并解压
Code/$wget$FreeImage
如果你使用的是虚拟环境,会缺少了一些FreeImage依赖,可以在这里手动添加。如果不是虚拟环境可以跳过此步。
在shiyanlou根目录里打开终端:
shiyanlou/$/$mkdirfreeimagecdfreeimagefreeimage/$wget
二、实验步骤
接下来,我们会自己制作普通二维码、带有图片的艺术二维码和动态二维码。
普通二维码确保当前目录为Code,在命令行中输入python3,进入python3环境:
Code/$python3
在python3环境中输入以下代码:
('')大功告成,那么来看一看自己制作的第一张二维码图片吧!(珍惜账号在这里我就不放图片啦~)
先退出python3环境
quit()
再使用火狐浏览器预览
Code/$
快快拿起手机扫一扫,看看是否有效,若成功,将跳转到蓝桥云课主页。
下面我们来详细地讲解一下()函数里面的参数
参数
含义
详细
words
二维码指向链接
str,输入链接或者句子作为参数
version
边长
int,控制边长,范围是1到40,数字越大边长越大,默认边长是取决于你输入的信息的长度和使用的纠错等级
level
纠错等级
str,控制纠错水平,范围是L、M、Q、H,从左到右依次升高,默认纠错等级为'H'
picture
str,将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片
colorized
颜色
bool,使得产生的图片由黑白变为彩色的
contrast
对比度
float,调节图片的对比度,1.0表示原始图片,更小的值表示更低对比度,更大的反之。默认为1.0
brightness
亮度
float,调节图片的亮度,其余用法和取值与contrast相同
save_name
输出文件名
str,默认输出文件名是""
save_dir
存储位置
str,默认存储位置是当前目录
图片二维码光是二维码,是否太单调了呢?没关系,我们能加上我们想要的图片,使二维码更具辨识度!我们准备了蓝桥云课的Logo,也可以选择你个人喜爱的一张来制作艺术二维码!
让我们将这张图加入到我们的二维码中,加入过程需要在参数里指定蓝桥云课Logo图片的地址(),我们也要设置新图片的保存名,以免和上一张二维码图片冲突。
(words='',picture='Sources/',save_name='',)
再次退出python3环境
quit()
使用火狐浏览器打开图片
Code/$
就会得到一张黑白的蓝桥云课Logo二维码。
黑白的,似乎不是那么好看,彩色的如何呢?实现彩色也非常简单,在参数里将colorized参数值设为True。
(words='',picture='Sources/',colorized=True,save_name='artistic_',)
Code/$firefoxartistic_
这样我们就会得到一张彩色的蓝桥云课Logo二维码。
好看多了,但我们的实验并没有到此为止哦!
动态二维码其实生成动态二维码,并没有想象的那么复杂。在这里,我们使用美丽的新垣结衣GIF!
在生成动态二维码的过程中,值得注意的一点是,我们生成保存的文件也必须是.gif格式哟。让我们赶快开始!
(words='',picture='Sources/',colorized=True,save_name='',)
这样就可以得到新垣结衣动态二维码啦!
三、MyQR源码解读
MyQR源码来自于github上的sylnsfar/qrcode项目,大家可以通过克隆的方式下载源码来学习,可以使用如下命令行:
Code/$gitclone
如果下载速度较慢的话,也可以下载我们服务器上面的源码,可以通过如下命令:
Code/$wget$
下面我们将一起来读下MyQR的源码内容,并且针对重点部分给大家详细讲解。
1.MyQR文件结构qrcode│││调用的文件││数据分析||纠错编码,ErrorCorrectionCodewords||获得QR矩阵||结合函数│└───example│0.png│1.png|2.png|
大家可以执行如下命令查看整个文件的目录树:
treeqrcode-master2.生成二维码的步骤
2.1数据分析MyQR/mylibs/
确定编码的字符类型,按相应的字符集转换成符号字符。
2.2数据编码MyQR/mylibs/
将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。
2.3纠错编码MyQR/mylibs/
按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。
2.4构造最终数据信息MyQR/mylibs/+
在规格确定的条件下,将上面产生的序列按次序放入分块中,将数据转成能够画出二维码的矩阵。
创建二维码的矩阵
添加查找器模式和添加分隔符add_finder_and_separator(qrmatrix)添加时间模式add_timing(qrmatrix)放置数据位place_bits(bits,qrmatrix)格式信息add_format_and_version_string(ver,ecl,mask_num,qrmatrix)returnqrmatrix
2.5生成二维码MyQR/mylibs/
使用画出二维码。
defdraw_qrcode(abspath,qrmatrix):unit_len=3x=y=4*unit_lenpic=('1',[(len(qrmatrix)+8)*unit_len]*2,'white')画出黑单位x+=unit_lenx,y=4*unit_len,y+unit_lensaving=(abspath,'')(saving)读取二维码图片qr=('RGBA')ifcolorizedelseqr读取要合并的图片bg0=(bg0).enhance(contrast)调节亮度将新加的图片覆盖原有的二维码图片,生成新的图片并保存。
foriinrange([0]-24):forjinrange([1]-24):ifnot((iin(18,19,20))or(jin(18,19,20))or(i24andj24)or([1]-49)or([0]-49andj24)or((i,j)inaligs)or(i%3==1andj%3==1)or(((i,j))[3]==0)):((i+12,j+12),((i,j)))实验总结
二维码的内容,就到此结束了。二维码在日常生活中的使用场景很多,大家可以结合实际生活来使用。





