Python利用Pillow(PIL)库实现验证码图片的全过程

前言

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

Pillow的用法参考:https://www.jb51.net/article/196007.htm

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

random的用法参考:https://www.jb51.net/article/196955.htm

一、验证码图片的效果

# coding=utf-8
import random
from PIL import Image, ImageDraw, ImageFont

width, 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 += char
 color = (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为26个大写字母)和数字中随机选择一个字符。

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, ImageFont

def gen_verified_image():
 width, height, font_size, font_num = 400, 150, 48, 4
 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\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 += char
  color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
  draw.text((x, y), char, fill=color, font=font)
 return image, verify

if __name__ == '__main__':
 image, verify = gen_verified_image()
 print(verify)
 image.show()

运行结果:

qtC7

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

总结

到此这篇关于Python利用Pillow(PIL)库实现验证码图片的文章就介绍到这了,更多相关Python用Pillow(PIL)库验证码图片内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3 pillow生成简单验证码图片的示例

    使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中 安装pillow $ pip3 install pillow 生成验证码图片 \vericode.py from PIL import Image,ImageDraw,ImageFont,ImageFilter import random #随机码 默认长度=1 def random_code(lenght=1): code = '' for char in range(lenght): cod

  • Python3 使用pillow库生成随机验证码

    Python3 使用pillow库生成随机验证码的代码如下所示: import random # pillow 包的使用 from PIL import Image,ImageDraw,ImageFont,ImageFilter #Image 负责处理图片 #ImageDraw 负责处理画笔 #ImageFont 负责处理文字 #ImageFilter负责处理路径 img=Image.new('RGB',(150,50),(255,255,255)) #建立一个图片 ''' RGB:表示采用RG

  • Python基于pillow判断图片完整性的方法

    本文实例讲述了Python基于pillow判断图片完整性的方法.分享给大家供大家参考,具体如下: 1.安装第三方库. pip install pillow 2.函数示例. #encoding=utf-8 #author: walker #date: 2016-07-26 #summary: 判断图片的有效性 import io from PIL import Image #判断文件是否为有效(完整)的图片 #输入参数为文件路径 def IsValidImage(pathfile): bValid

  • Python用Pillow(PIL)进行简单的图像操作方法

    Python用Pillow(PIL)进行简单的图像操作方法 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为由4个整数组成的元组,分别是R.G.B.A.整数的范围0~255.RGB全0就可以表示黑色,全255代表黑色.可以猜测(255, 0, 0, 255)代表红色,因为R分量最大,G.B分量为0,所以呈现出来是红色.但是当alpha值为0时,无论是什么颜色,该颜色都不可见,可以理解为透明. from

  • python pillow模块使用方法详解

    pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持python2和python3,目前最新版本是3.0.0. Pillow的Github主页:https://github.com/python-pillow/Pillow Pillow的文档(对应版本v3.0.0): https://pillow.readthedocs.org/en/latest/handb

  • python 3.7.0 下pillow安装方法

    PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7 pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图像处理库. Python3.7.0 如何安装pillow 此安装方法在windows7环境下完成: >>>win+r调出运行窗口,键入cmd弹出命令窗口 >>>此处需要键入命令调到python所在的文件夹中,如图,我是将python安装在d盘中 >>>在D

  • Python3安装Pillow与PIL的方法

    关于Pillow与PIL PIL(Python Imaging Library)是Python一个强大方便的图像处理库,名气也比较大.不过只支持到Python 2.7. PIL官方网站:http://www.pythonware.com/products/pil/ Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.目前最新版本是3.0.0. Pillow的Github主页:https://github.com/python-pillow/Pillow Pil

  • Python编程中使用Pillow来处理图像的基础教程

    安装 刚接触Pillow的朋友先来看一下Pillow的安装方法,在这里我们以Mac OS环境为例: (1).使用 pip 安装 Python 库.pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档). $ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz $ tar xzf pip-0.7.2.tar.gz $ cd pip-0.7.2 $ python se

  • Python利用Pillow(PIL)库实现验证码图片的全过程

    前言 Pillow库有很多用途,本文使用Pillow来生成随机的验证码图片. Pillow的用法参考:https://www.jb51.net/article/196007.htm 验证码是随机的,使用Python内置的random库来生成随机的颜色和随机的字符. random的用法参考:https://www.jb51.net/article/196955.htm 一.验证码图片的效果 # coding=utf-8 import random from PIL import Image, Im

  • Python使用PIL库实现验证码图片的方法

    本文实例讲述了Python使用PIL库实现验证码图片的方法.分享给大家供大家参考,具体如下: 现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一.这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码.代码中有详细注释. #!/usr/bin/env python #coding=utf-8 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter _l

  • Python基于内置库pytesseract实现图片验证码识别功能

    这篇文章主要介绍了Python基于内置库pytesseract实现图片验证码识别功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 环境准备: 1.安装Tesseract模块 git文档地址:https://digi.bib.uni-mannheim.de/tesseract/ 下载后就是一个exe安装包,直接右击安装即可,安装完成之后,配置一下环境变量,编辑 系统变量里面 path,添加下面的安装路径: 2.如果您想使用其他语言,请下载相应的

  • Python Pillow(PIL)库的用法详解

    Pillow库是一个Python的第三方库. 在Python2中,PIL(Python Imaging Library)是一个非常好用的图像处理库,但PIL不支持Python3,所以有人(Alex Clark和Contributors)提供了Pillow,可以在Python3中使用. 官方文档路径:https://pillow.readthedocs.io/en/latest/ 一.安装Pillow pip install pillow Pillow库安装成功后,导包时要用PIL来导入,而不能用

  • 利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例

    前言 最近的一个项目中需要在图片上添加文字,使用了OpenCV,结果发现利用opencv给图像添加文字有局限.可利用的字体类型比较少,需要安装Freetype扩展,比较复杂.而且不能用putText函数输出中文,否则就会出现乱码的情况.只好选择使用Python PIL函数库对照片进行处理,利用Python自带的PIL库扩展图片大小给图片加上文字描述,大多都是库函数调用,只是给定图片宽度后计算文字所需行数的代码需要写. 代码比较丑,but it works. 代码示例 #!/usr/bin/env

  • Python中使用PIL库实现图片高斯模糊实例

    一.安装PIL PIL是Python Imaging Library简称,用于处理图片.PIL中已经有图片高斯模糊处理类,但有个bug(目前最新的1.1.7bug还存在),就是模糊半径写死的是2,不能设置.在源码ImageFilter.py的第160行: 所以,我们在这里自己改一下就OK了. 项目地址:http://www.pythonware.com/products/pil/ 二.修改后的代码 代码如下: 复制代码 代码如下: #-*- coding: utf-8 -*- from PIL

  • Python中用PIL库批量给图片加上序号的教程

    女友让我给她论文的图片上加上字母序号,本来觉得是个很简单的事情,但那个白底黑字的圆圈序号却难住了我, 试了几个常用的软件,都不行. 后来用 PS + 动作,倒是能搞出来,不过也不容易,正好那天没搞完,于是拿回自己家做,但我的电脑上又没有 PS, 所以就用 python 实现了. 效果图 这里用的图片全是 240X240 的,按文件名的首字母作为序号,PIL 虽然可以计算文字的尺寸,但类似 D 这样的字符依然不能处于圆圈的正中,所以还对个别字符做了偏移设置,本来想用 aggdraw 画圆圈的,能平

  • python中使用PIL制作并验证图片验证码

    验证码制作 #string模块自带数字.字母.特殊字符变量集合,不需要我们手写集合 import string import random import os import uuid import settings from PIL import Image, ImageDraw, ImageColor, ImageFilter, ImageFont class Code(object): # 生成随机生成数字或字母 def random_hexdigits(self, len=1): retu

随机推荐