本文中心为验证码图片制作
一共为以下五步:
-
导包,
-
生成验证码图片的纯色背景图,相当于一个画布
-
将纯色背景图的每一个像素点用随机颜色进行填充
-
在图片上写入随机字符,在这个过程中,需要定义字体,随后才可以生成字符
4.1 定义字体:首先要从电脑上找到字体库,只需在我的电脑中搜索fonts文件夹即可,找到后,打开,就可以看到电脑中有的字体,选择自己喜欢的若干字体文件,拖到本代码所在的文件路径,即可使用。
4.2 生成字符
5,显示图片
注:其余需要注释的地方已在代码中穿插
import Image
import ImageDraw
import ImageFont
import random
# 思路:定义随机字符,定义随机颜色,将随机颜色填充到一张画布上,在画布上定义随机字符
#获得随机颜色函数,只需返回三个0-255之间的数即可
def getcolor():
return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
#获取随机字符
def getchar():
#这里需要随机生成字母或者数字,依照上一篇博客可知
if random.randint(0, 1):
return chr(random.randint(65, 90))
else:
return str(random.randint(0, 9))
if __name__ == '__main__':
# 1. 首先定义一个图片,用来显示随机生成的验证码
WIDTH=360#背景图片的宽
HEIGHT=120#背景图片的高
img=Image.new(mode="RGB",size=(WIDTH,HEIGHT),color=(255,255,255))
# img.show()
#2. 利用ImageDraw模块的Draw方法,将img对象与ImageDraw模块绑定,从而创建一个可用来对img进行操控的对象,这里命名draw。
draw=ImageDraw.Draw(im=img)
#3. 给背景图添加随机颜色
#使用ImageDraw库中的point可以在图片上的给定一个坐标点的位置处画一个点
for x in range(WIDTH):
for y in range(HEIGHT):
draw.point((x,y),fill=getcolor())
# img.show()
# 4. 现在图片定义好了,就需要往图片上写字了,
# 4.1首先要做的就是定义字的字体,为了与现实中的验证码尽量的相近,可以多使用几种字体,使用列表来存储字体
font_list=["font1.TTF","font2.TTF"]
#4.2定义字体以及字体大小,在这里要注意如果字体大小定义的过小,很容易观察不到结果
font=ImageFont.truetype(font=font_list[random.randint(0,1)],size=90)
#4.3往图片中添加随机字符
#验证码一般为四个字符或数字的组合,所以需要四次获取getchar(),为了使字符不被先生成的字符覆盖,需要定义位置,只需改变x的位置即可
x=30
for i in range(4):
draw.text((x,10),text=getchar(),font=font,fill=getcolor())
x+=70
#5 显示图片
img.show()
#如果想保存图片,执行下面语句
# img.save("图片名字.png","PNG")
运行效果如下: