Hi~ o(* ̄▽ ̄*)ブ!你好吖~!
经过 "作业雨 " 的 "洗礼",我终于又回来啦!!!
今天又有什么 "惊喜" 捏?!
往下看叭~!!!
众所周知,我是一个不务正业的六年级可怜博主,二维码在我们的生活中无处不在,比如我们老师发作业,就是发一个二维码,扫码后自动跳转到那个交作业的页面,而我一直就很好奇,这个东东是怎么做出来的呢?
而今天我终于知道啦 !
你也想要知道吗?那就接着往下看叭 ~~~!
程序语言 | Python |
工具/原料 | 电脑,qrcode,PIL |
其它 | 求点赞!求评论!求关注!【跪.gif...】 |
Step 1:
首先,在做之前,我们需要先安装两个库 -- qrcode & PIL,它们是所有程序的基础 ~
不知道如何安装?可参考我的这篇文章~安装顺序完全相同~:
【Python】从0到1:Pygame安装那些事儿~(保会,不会请来砍我!)
Step 2:
安装成功后,就可以开始写代码啦~!
首先,先用 import qrcode( PIL)导入 qrcode( PIL) 模块~
qrcode是 Python中自带的二维码生成模块,它里面有很多决定二维码外观的参数,不过暂时先不去管它们,在这一步我们还用不到 ~
PIL是 Python中自带的图片处理库(模块),它里面有很多修改图片各种参数(属性)的函数,不过在这里我们都用不到,我们只需要了解基本的 "显示图片 " 部分即可啦 ~!
好了,截止到现在,所有需要的 "材料" 都已经准备齐啦!可以开始 "做作品" 咯!【期待而激动的小眼神~】
先从最简单的开始叭~:
# 二维码-1
import qrcode # 导入qrcode库
img = qrcode.make('Hi~ 我叫九亿~Nice to see you ~~~!') # make方法用于自动生成二维码
img.show() # show方法用于展示图片
你可能注意到了,为什么我没有导入 PIL 库呢?
那是因为在这一步,我们还用不到它,现在我们仅仅是生成了一个二维码,但这个二维码的所有属性都是随机生成的,也就是说,你根本不知道写完这个之后会跳出来什么样的二维码,你或许喜欢它,或许不喜欢它,纯粹是碰运气!
那....该怎么办呢?
这就需要我们自己设置二维码的属性啦!也就是俗称的 "高级二维码 "!
优点: | 1. 简洁明了,代码可读性强,对新手友好(天呐我这是在写什么!) 2. 扫描后可显示出 make()函数内写的内容 |
缺点: | 1. 属性完全为随机生成,随机性太强. 2. 不可以自定义,没有特色. |
Step 3:
在qrcode里,有4个基本属性:
- version:版本号(1-40),一般来说....版本号越高越容易让人产生密集恐惧症....(个人感觉....4号是看起来最舒服的~ 40号...你可以试试~)
- error_correction:纠错(容错率),也就是在该二维码被遮挡多少的时候依然可以识别出该二维码,这里的 H 是最高~(容错率约为30%),其实它的默认值是15%,也就是 M号,但为什么这里要把它设成 H呢?不用着急~后面会说到的~~~
- box_size:单位格子内的像素数.(默认为10,在下面的代码中我没有修改,可根据个人喜好进行调整~)
- border:二维码四周留白部分包含的格子数~(默认为4,在下面代码中我没有修改,可根据个人喜好进行调整~)
了解了这些变量分别代表了什么,就可以开始写代码啦~!
(其实还有一些属性,但并不是很常用,So...在这里不另介绍,可以去 https://segmentfault.com/a/1190000015650720 了解更多哦~)
话不多说,上代码!
# 二维码-2
import qrcode
# 基本属性
qr = qrcode.QRCode(
version = 4,
error_correction = qrcode.constants.ERROR_CORRECT_H,
box_size = 10,
border = 4)
qr.add_data('Hi~ o(* ̄▽ ̄*)ブ~') # 扫描后显示的文本
img = qr.make_image() # make_image方法用于自动生成二维码
img.show() # 显示二维码
是的~这次依然没有导入PIL库~因为现在我们依然用不到它~
这次的代码比上次多了点什么呀!是哒!这次,我们可以自定义二维码的大小,容错率,像素,留白空间等等基本属性啦!
But...微信二维码好像还多了一个个人头像哎....
是的!这也是我们接下来要做的!中间有 Logo的二维码!(激不激动?!)
优点: | 1. 可以自定义一些基本属性~ 2. 代码依然很简洁,易读~ |
缺点: | 1. 不够有特色,没有个人Logo,过于千篇一律. |
Step 4:
终于可以用到 PIL 库啦!
PIL库是 Python中的图片处理库,里面也有很多内置函数哦!
注:下列有关 PIL库的内容和二维码代码没有太大关系,可以选择跳过~
- show():展示图片,这个前面已经提到多次~
- format,size,mode:从左到右依次为:图片格式,图片大小和图片的 RGB值(即图片颜色值)~
- thumbnail 和resize:等比例和非等比例缩小图片.
- crop:裁剪图片.(需要提供一个元组,其中包含4个坐标(左上/右上/左下/右下))
- ImageEnhance:增强图片亮度.
Emmm....这么说好像不太清楚呀!
还是用代码展示一下叭~
# PIL部分代码~
from PIL import Image
from PIL import ImageEnhance
program = Image.open(r"这里填写图片的路径~") # open函数,负责从电脑中打开该图片,必须保证路径存在,若路径不存在,则会出现FileNotFoundError~
# 展示图片
program.show()
# 打印图片的一些属性
print(program.format,program.size,program.mode)
# 等比例缩小图片
w,h = program.size
size = (w//2,h//2)
program.thumbnail(size)
program.show()
# 非等比例缩小图片(请勿在路过精神病院时观看!)
size = (100,100)
img = program.resize(size)
img.show()
program.show()
# 截取图片
x = (215,415,300,450)
img = program.crop(x)
img.show()
# 增强图片亮度(小心闪瞎眼睛!)
img = ImageEnhance.Brightness(program).enhance(10) # enhance()方法内的数字为增强亮度的倍数(如enhance(n)就是将图片亮度增强n倍)
img.show()
这样👆👆👆就清晰多啦~!
好了,现在有关 PIL库的一些基本函数也了解完了,那就开始写代码叭~!
Step 5:
前面我们提到过,二维码有一个 "容错率 " 属性,默认值为 15%,而我们设置的 "容错率 " 为 30%,但这是为什么呢?
现在我们终于可以回答这个问题啦~!
Answer:
因为我们要在二维码里插入Logo!So....既要让二维码可以被扫描,不会显示无法识别,又不能让 Logo太小!而当容错率为默认值 H( 15%)的时候,Logo最多占到图片的 1/7左右,但当容错率为为 30%的时候,Logo可以占到图片的 1/4 甚至更多!而且!当二维码正好占到图片的 25% 的时候,就可以直接将二维码的长宽都平均分成 4份,Logo各取其中 2份就可以啦~!( 1/2 * 1/2 = 1/4)这样也避免了为了让二维码居中而进行一些复杂的计算啦~!众所周知,我可是很懒的!
解答完这个问题,就可以开始写代码啦~!
import qrcode
from PIL import Image
qr = qrcode.QRCode(
version = 4,
error_correction = qrcode.constants.ERROR_CORRECT_H,
box_size = 10,
border = 4)
qr.add_data('扫描后显示的文本')
img = qr.make_image()
# 获取二维码图片的size
img_w,img_h = img.size
# 把二维码转化成RGB格式
img = img.convert('RGB')
# 打开图片icon 并将其大小处理成1/4
icon = Image.open(r"Logo图片的路径")
icon_w,icon_h = icon.size
if icon_w > img_w/4:
icon_w = img_w//4
if icon_h > img_h/4:
icon_h = img_h//4
# 非等比例缩小
icon = icon.resize((icon_w,icon_h))
# 把Logo图片贴到二维码图片上
x = (img_w - icon_w)//2
y = (img_h - icon_h)//2
# 粘贴Logo
img.paste(icon,(x,y))
img.show()
# 保存图片
img.save(r"保存的路径")
现在这个二维码,就是完全自定义的啦~~!
开不开心?激不激动?
优点: | 1. 完全自定义,随心所欲怎么搞都行!!! 2. 有Logo,既好看又实用~! |
缺点: | 1. 目前暂未发现~(发现了可以评论区告诉我哦~!) |
嗷嗷嗷!做完啦!真的是从0到 1呀!
Ps:后期我会出一篇有关 "如何制作动态二维码" 的文章,记得关注哦 ~~~!
最后!【彩蛋来了!!!】
送给大家一张二维码哈~!
大家一定要去扫一扫呀!有惊喜!超大的惊喜~!!!
这张二维码很神奇,扫进去之后...
累?不存在的!你只会觉得!惊!喜!以及!激!动!以及!开!心!以及...........【此处省略 10的 1024次方字!】
Emmm....明天要考 Python三级!
祝我成功鸭!
拜拜啦~
φ(゜▽゜*)♪
12-05
By 九亿