上次玩数独(你知道怎么切数独?Python秒解数独?)气死我了。。。这次我拿出来了照片直接看他的反应。小胖这次想把人和数字结合起来,看看他会怎么样。作为一个合格的程序员,怎么能不明白二维码是怎么生成的,怎么解析的,怎么玩的呢?废话不多说,今天就用Python来玩玩这个人机代码集成吧。演示环境操作系统:windows10Python版本:python3.7代码编辑器:pycharm2018.2使用的模块:zxing、myqr、qrcode提示:以上模块都是用pip安装的,它们依赖的模块也会自动安装。太奇怪了。pipinstallqrcodepipinstallmyqrpipinstallzxing使用qrcode模块生成二维码首先,让我们生成一个“HelloWorld”。importqrcodedeffirst_demo():#存储的字符串qr=qrcode.make('HelloWorld')qr.get_image().show()通过以上步骤,这个经典的介绍就完成了。拿出手机微信、QQ扫码,就会出现“HelloWorld”字样,是不是勾起了你学习Python的回忆?刚才只是小试牛刀,下面进阶,将生成的二维码保存到本地。importqrcodedefsecond_demo():text='Python专栏'img=qrcode.make(text)#需要传一个参数文件名img.save('qr.png')img.show()I♂二维码大家你应该熟悉它。以上步骤生成的是纯二维码,不符合我们的气质。接下来,我将使用qrcode库生成带有嵌入图像的QR码。fromPILimportImageimportqrcodedefcreate_icon_qrcode():qr=qrcode.QRCode(#二维码的大小。官方称为versionversion=1,#二维码错误处理级别,有四种方式,后面会给出解释borderborder=2)#添加数据qr.add_data('Hicute,IamHatanoYuiLaoshi')#填充数据qr.make(fit=True)#生成二维码图片并指定填充颜色Backgroundcolorimg=qr.make_image(fill_color='grey',back_color='white')#获取生成的二维码图片的宽高img_w,img_h=img.size#添加图片到二维码中#使用pillow打开图片imageicon=Image.open('girl.jpg')#设置图标大小为二维码大小的六分之一imagefactor=3size_w=img_w//factorsize_h=img_h//factor#得到图标图片大小icon_w,icon_h=icon.size#只有当我们的图标图片大小超过二维码图片的三分之一时,我们才重新定义图标图片的大小。ificon_w>size_w:icon_w=size_wificon_h>size_h:icon_h=size_h#重置图标的大小icon=icon.resize((icon_w,icon_h),Image.ANTIALIAS)#获取二维码显示的位置和坐标.w=(img_w-icon_w)//2h=(img_h-icon_h)//2img.paste(icon,(w,h),mask=None)img.save('girl.png')这是版本参数和error_correction参数:version:是二维码图片的大小,官方叫version。当版本为1时,二维码是一个由2121组成的正方形,如果版本为2,则为2525,如果版本为3,则为2929。最大为40。所以最大尺寸为(40-1)*4+21=177.即177177个方格。error_correction:纠错级别,级别越高,纠错能力越强。这就是为什么我们的二维码有点不完整,但是可以正确读取信息的原因。纠错能力L级:可纠错7%的字符M级:可纠错15%的字符Q级:可纠错25%的字符H级:可纠错30%的字符步骤,生成一个灰色背景填充的二维码,最核心的中间部分……她是谁?github地址:https://github.com/lincolnloo...以上就是二维码库的基本使用。接下来介绍一下MyQr库。这个库还是挺强大的,强大到可以用图片作为二维码的背景,甚至是动态图片。使用MyQr模块生成二维码importosfromMyQRimportmyqrdefmyqr_demo():#注意这里的字符串不能出现中文,只能出现下面的#supported_chars=r"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz··,.:;+-*/\~!@#$%^&`'=<>[]()?_{}|"words='helloworld'#调用myqr.run方法生成图片。返回三个值,二维码的版本,纠错级别,二维码版本的完整路径,level,qr_name=myqr.run(#存储的数据words=words,#二维码大小version=10,#selectionThebackgroundpicturepicture='girl.jpg',#是否为彩色,如果为False则为黑白,这里是当前目录,默认是这个save_dir=os.getcwd())print(version,level,qr_name)执行上面的代码,我们就可以生成一个以我们的图片为背景的二维码了。如果需要使用动态图片作为背景图片,其实和普通背景图片差不多。只需要写背景图片的文件名,然后保存图片的时候把二维码的后缀改成gif.github地址:https://github.com/sylnsfar/q...这里有一个这两个库的简要比较。qrcode支持中文数据,但是myqr不支持中文和其他字符。二维码不能设置背景图片,但可以将图片放在二维码中间。myqr可以设置背景为图片,允许为动态图片。使用zxing库解析二维码上面我们只讲了如何生成二维码图片。接下来,我们将介绍如何解析二维码中的信息。importzxingdefparse_qrcode(filename):reader=zxing.BarCodeReader()barcode=reader.decode(filename)print(barcode.parsed)只需几行代码,复杂简单的二维码就可以解析并获取里面的详细数据。注意:如果二维码中的数据包含中文,那么应该报这样的错误。UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc0inposition0:invalidstartbyte此时,你只需要修改这个库的源代码。修改位置在zxing包下__init__.py文件的第81行。原来raw=raw[:-1].decode()parsed=parsed[:-1].decode()returncls(format,type,raw,parsed,points)需要改为如下raw=raw[:-1].decode(encoding='gbk')parsed=parsed[:-1].decode(encoding='gbk')returncls(format,type,raw,parsed,points)这样就会有没有错误。这样,我们就成功解析了二维码。本文全套代码已上传至Github:https://github.com/MiracleYou...更多好玩有趣的Python内容,关注公众号“Python专栏”
