python实战练手项目—制作网站登录时的图片验证码
许多网站在注册时都要求输入验证码,这样做为了防止被程序恶意注册,本篇教程带你研究一下如何生成网站验证码
1. Pillow
PIL(Python Imaging Library)是一个强大的python图像处理库,只支持到python2.7, Pillow虽说是PIL的一个分支,但已经发展成比PIL本身更具活力的图像处理库,我们使用Pillow来生成验证码,安装方式为
pip3 install Pillow |
2. 生成一张指定大小随机颜色的图片
2.1 随机颜色
颜色的处理使用(r,g,b)格式,r, g, b 的范围是[0, 255], 使用random模块的randint方法生成3个随机数
def random_color(): |
2.2 生成一张指定大小的图片
def random_color(): |

现在还只是生成了一张颜色随机的图片,接下来要在图片上面写上随机数字和字母
3. 在图片上写上随机数字和字母
3.1 生成随机数字和字母
def get_random_str(): |
使用random模块提供的随机函数生成指定长度的字符串
3.2 在image对象上画数字和字母
def draw_str(count, image, font_size): |

创建一个ImageDraw.Draw对象,在image上画随机字符,你可以设置字体, 我使用了Andale Mono.ttf, mac电脑上在/System/Library/Fonts 目录下找到字体,其他系统也有各自的字体文件,将字体文件复制到与脚本相同的目录下。
4. 制造噪点
为了防止验证码被轻易的破解,还应该在图片上制造一些噪点,随机画几条线,随机画几个点
def noise(image, width=120, height=35, line_count=3, point_count=20): |

5. 生成base64编码的图片
实践中,如果是生成网站注册使用的验证码图片,一般来说不会将其保存到图片文件中,因为这会生成大量的小图片,完全没必要。我们可以将图片的内容保存到BytesIO对象中,最终生成base64编码的图片,这样,向前端传回去的就是字符串,格式为
data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAH... |
data:image/jpeg;base64 这一段是固定写法,逗号剩余的部分是图片经过base64编码后的字符串
def valid_code(): |
6. 全部代码
为了向你阐述生成验证码图片的过程,我将整个过程进行拆解,因此代码也被拆解的凌乱,你可以将这些代码整合,以便在实际应用中使用
import os |