Python使用Pillow(PIL)库实现验证码图片

Pillow库有很多用途,本文使用Pillow来生成随机的验证码图片。

Pillow的用法参考:https://blog.csdn.net/weixin_43790276/article/details/108478270

验证码是随机的,使用Python内置的random库来生成随机的颜色和随机的字符。

random的用法参考:https://blog.csdn.net/weixin_43790276/article/details/96768637

一、验证码图片的效果

# coding=utf-8
import random
from PIL import Image, ImageDraw, ImageFontwidth, height, font_size, font_num = 300, 100, 48, 5
bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
image = Image.new(mode='RGB', size=(width, height), color=bg_color)
draw = ImageDraw.Draw(image, mode='RGB')
font = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", font_size)
verify = str()
for i in range(font_num):x = random.randint(i*(width/font_num), (i+1)*(width/font_num)-font_size)y = random.randint(0, height-font_size)char = random.choice([chr(alpha) for alpha in range(65, 91)] + [str(num) for num in range(10)])verify += charcolor = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.text((x, y), char, fill=color, font=font)
print(verify)
image.show()

运行结果:

KG7CQ

二、使用的方法介绍

上面的代码已经实现了生成随机验证码的功能,现在介绍代码中用到的函数和方法。

Image.new(): Image模块中的new()函数,创建一张图片(画布),用于绘图。传入3个参数,画布的模式('RGB'表示真彩图片)、尺寸和颜色,画布的颜色就是验证码图片中的背景颜色。

ImageDraw.Draw(): ImageDraw模块中的Draw()函数,实例化一个ImageDraw类的对象draw,执行绘图。传入两个参数,画布和绘图的模式,画布使用前面Image.new()创建的画布,模式继续使用'RGB'真彩模式。Draw()函数会将传入的两个参数传给ImageDraw类,实例化一个类对象并返回,以便后面使用类对象draw调用对应的方法执行绘图,使用draw对象将验证码中的字符画在画布上。

ImageFont.truetype(): ImageFont模块中的truetype()函数,从字体文件或字体对象中读取字体并返回一个字体对象。传入两个参数,字体文件(或字体对象)和字体大小。字体只能使用当前电脑支持的字体,在Windows系统中,已安装的字体一般都保存在C:\Windows\Fonts文件夹中,如上面代码中的C:\Windows\Fonts\Arial.ttf,应该每个人都默认安装了,在代码中一定要带上扩展名'.ttf',否则读取不到字体文件。如果字体不在Windows\Fonts这个目录下,可以在控制面板找或直接在所有文件中搜索Fonts。字体大小传入一个数字即可。

random模块中的randint()和choice()。在上面的代码中,randint()用于随机生成颜色值,随机生成字符在画布上的x和y坐标。choice()用于从26个大写字母(chr字符集中的65~90)和数字中随机选择一个字符。

text(): ImageDraw模块中ImageDraw类的方法,使用ImageDraw.Draw()返回的类对象draw来调用,将字符画到画布上。text()方法有12个参数,并且还可以接收其他的可变参数和关键字参数,不过只有两个必传参数,上面的代码中也只传了4个参数,所以其他的参数就不做介绍了。第一个必传参数是xy,传入一个元组或列表,表示字符画到画布上的位置坐标(字符左上角),第二个必传参数是text,传入一个字符串,表示需要画的字符。上面还传了两个参数fill和font,fill表示字符的颜色,传入一个随机的颜色,font表示字符的字体,传入用ImageFont.truetype()函数返回的字体对象。

循环将每次随机生成的字符绘画到画布上,再使用image对象的show()方法将图片显示出来,随机的验证码图片就生成成功了。

三、优化封装

import random
from PIL import Image, ImageDraw, ImageFontdef gen_verified_image():width, height, font_size, font_num = 400, 150, 48, 4bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))image = Image.new(mode='RGB', size=(width, height), color=bg_color)draw = ImageDraw.Draw(image, mode='RGB')font = ImageFont.truetype("C:\Windows\Fonts\Gadugi.ttf", font_size)verify = str()for i in range(font_num):x = random.randint(i * (width / font_num) + 10, (i + 1) * (width / font_num) - font_size - 10)y = random.randint(20, height - font_size - 20)char = random.choice([chr(a) for a in range(65, 91)] + [chr(b) for b in range(97, 123)] +[str(num) for num in range(10)])verify += charcolor = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.text((x, y), char, fill=color, font=font)return image, verifyif __name__ == '__main__':image, verify = gen_verified_image()print(verify)image.show()

运行结果:

qtC7

验证码的字体一般不会使用很容易辨认的字体,可以换一个复杂一点的。除了大写字母之外,也可以把小写字母加进来。调整字符的位置避免画到画布的边缘。将代码封装到一个函数中,并将image对象和验证码字符verify作为返回值,方便调用时展示图片和进行验证。

Python使用Pillow(PIL)库实现验证码图片相关推荐

  1. Python之Pillow(PIL)库

    目录 安装Pillow 基本操作 打开本地图片 裁剪 创建一张新图片 绘制矩形 水平翻转的图像 垂直翻转的图像 调整图像大小 照片复制 图片添加文字 水印图片 与Numpy一起使用 从Numpy数组创 ...

  2. 新发的日常小实验——使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍数(Unity、PIL、Pillow、压缩)

    文章目录 一.问题:图片导入Unity被调整成2的N次方 二.设置不转换成2的N次方 三.使用ETC压缩格式,图片宽高必须是4的倍数 四.使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍 ...

  3. Python Pillow(PIL)库的用法介绍(二)

    Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...

  4. Python 技术篇-用PIL库修改图片透明度实例演示,改变png图片色道为RGBA、RGB

    PIL 库可以设置图片透明度. pip install pillow 安装了 pillow 库后就可以使用 PIL 库了. 我们都知道,图片是由无数个点组成的,300x300 像素,就是 9 万个点. ...

  5. pil库修改图片大小_python 利用PIL库进行更改图片大小的操作

    python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...

  6. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  7. 利用Python中的PIL库去处理图片

    利用Python处理图片,任选一张图片,用PIL抓取并显示图像轮廓. 安装PIL在cmd中输入 pip install pillow 今天我们所用到的原图为蕾姆的一张图片 下面就让我们看下Python ...

  8. PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码. 使用技术: php使用GD库绘图 [php版本7.3] php session 缓存 实现最终效果: 一. 配置 ...

  9. Python 技术篇-用PIL库旋转图片、改变图像尺寸

    首先需要安装 PIL 库,直接pip install pillow就好了. 旋转包括 transpose() 和 rotate() 两种方式. resize((a, b)) 是用来改变图片尺寸的. # ...

最新文章

  1. 知识图谱学习笔记-Cypher语句使用
  2. springmvc注解小示例(转)
  3. linux live使用方法,使用linux-live kit对Linux备份/部署
  4. python写背单词软件_python实现屏保程序(适用于背单词)
  5. as400 编程语言c,AS400_RPG入门
  6. 安装西门子博图一直重启_西门子博图重启后继续安装没完成的程序怎么去除?...
  7. 鸿蒙(HarmonyOS)支持低代码开发,无需HTML知识,就可以设计复杂界面
  8. 计算机音乐谱毛不易,毛不易《平凡的一天》五线乐谱
  9. Python批量获取手机号码归属地(图文展示)
  10. 微信订阅号之政府认证
  11. 图像形态学——击中击不中
  12. 树莓派GPIO针脚在python中BCM与BOARD模式
  13. 搭建 Angular + Cordova + Ionic 集成开发环境
  14. 服务器2012系统用什么更新驱动程序,服务堆栈更新程序适用于 Windows 8 和 Windows Server 2012...
  15. 申请计算机课代表,课代表申请书的格式是怎样的啊???
  16. Vue3.x 报 Uncaught TypeError:Object(...) is not a function( Vue3对象不是函数解决思路)
  17. Simulink模块库介绍(三)——非线性模块
  18. 该产品与此版 VMware Workstation 不兼容,因此无法使用
  19. 用r语言画出y = ax^2 + bx + c,R语言中使用curve函数绘制常用函数曲线
  20. 注册表应用宝典(1)

热门文章

  1. 巴西教育科技公司Arco Educacao上市 融资1.95亿美元
  2. Element UI自定义表单验证 公共提取
  3. rsyslod服务配置
  4. 编码规范-html.md
  5. MySQL学习笔记之MySQL安装详解
  6. ICallbackEventHandler不支持二次回调的问题
  7. Docker轻量级管理工具Portainer
  8. 创建设计模式 - 原型设计模式
  9. php pjax数据返回,如何将Pjax整合进网站,实现全站无刷新加载?
  10. iOS Class结构分析