Python生成随机验证码,需要使用PIL模块.
安装:
基本使用
1. 创建图片
| from PIL import Image |
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| |
| |
| |
| |
| |
| |
| |
| with open('code.png','wb') as f: |
| img.save(f,format='png') |
2. 创建画笔,用于在图片上画任意内容
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
3. 画点
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| |
| # 第一个参数:表示坐标 |
| # 第二个参数:表示颜色 |
| draw.point([100, 100], fill="red") |
| draw.point([300, 300], fill=(255, 255, 255)) |
4. 画线
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| # 第一个参数:表示起始坐标和结束坐标 |
| # 第二个参数:表示颜色 |
| draw.line((100,100,100,300), fill='red') |
| draw.line((100,100,300,100), fill=(255, 255, 255)) |
5. 画圆
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| # 第一个参数:表示起始坐标和结束坐标(圆要画在其中间) |
| # 第二个参数:表示开始角度 |
| # 第三个参数:表示结束角度 |
| # 第四个参数:表示颜色 |
| draw.arc((100,100,300,300),0,90,fill="red") |
6. 写文本
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| # 第一个参数:表示起始坐标 |
| # 第二个参数:表示写入内容 |
| # 第三个参数:表示颜色 |
| draw.text([0,0],'python',"red") |
7. 特殊字体文字
| img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| |
| |
| font = ImageFont.truetype("kumo.ttf", 28) |
| |
| |
| |
| |
| draw.text([0, 0], 'python', "red", font=font) |
| 图片验证码 |
| import random |
| |
| def check_code(width=120, height=30, char_length=5, font_file='kumo.ttf', font_size=28): |
| code = [] |
| img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255)) |
| draw = ImageDraw.Draw(img, mode='RGB') |
| |
| def rndChar(): |
| """ |
| 生成随机字母 |
| :return: |
| """ |
| return chr(random.randint(65, 90)) |
| |
| def rndColor(): |
| """ |
| 生成随机颜色 |
| :return: |
| """ |
| return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255)) |
| |
| |
| font = ImageFont.truetype(font_file, font_size) |
| for i in range(char_length): |
| char = rndChar() |
| code.append(char) |
| h = random.randint(0, 4) |
| draw.text([i * width / char_length, h], char, font=font, fill=rndColor()) |
| |
| |
| for i in range(40): |
| draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor()) |
| |
| |
| for i in range(40): |
| draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor()) |
| x = random.randint(0, width) |
| y = random.randint(0, height) |
| draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor()) |
| |
| |
| for i in range(5): |
| x1 = random.randint(0, width) |
| y1 = random.randint(0, height) |
| x2 = random.randint(0, width) |
| y2 = random.randint(0, height) |
| |
| draw.line((x1, y1, x2, y2), fill=rndColor()) |
| |
| img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) |
| return img,''.join(code) |
| |
| |
| if __name__ == '__main__': |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| pass |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了