【Python】从0到1:一文教会你如何用Python制作好看又实用的二维码!【文末彩蛋!】(可直接copy + 运行哦~!)

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 九亿

 

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值