接单日记(四)验证码图片生成-当前简讯
(相关资料图)
目录- 接单日记(四)验证码图片生成
- 一、 实验目的
- 二、 实验内容
- 三、 程序及结果
- 1、 运行程序
- 2、 运行结果
接单日记(四)验证码图片生成
此为一个实验报告,故遵守实验报告的格式。
一、 实验目的
- 熟悉Python第三方库pillow的安装方法
- 熟悉Python第三方库pillow的简单使用
- 理解验证码图片的生成原理
- 理解Python内置模块string的函数方法,及其属性
二、 实验内容
编写程序,绘制一个验证码图片,要求图片的背景为白色,同时该验证码有随机四位字母或者数字组成,在图片上还需要有干扰线,可以不需要干扰点。
三、 程序及结果
1、 运行程序
#!/usr/bin/env python# -*- coding: UTF-8 -*-# @author: A.L.Kun# @file: Verification.py# @time: 2023/4/19 15:15from random import choice, randintfrom PIL import Image, ImageDraw, ImageFontclass Verification: """生成验证码图片的类""" def __init__(self, n, draw_line, size, font_path, bgcolor, path): self.draw_line = draw_line # 是否添加干扰线 self.n = n # 生成即为验证码 self.lis_all_code = [] # 存储获得的字母和数字 self.getAllCode() # 调用方法生成 self.bgcolor = bgcolor # 背景颜色 # print(self.lis_all_code) # 检测生成的字母和数字 self.ret = "" # 保存生成的验证码 self.size = size # 设置大小 self.font = font_path # 设置字体 self.save_path = path # 存储的路径 def getAllCode(self): """获得所有字母和数字,存储在列表中""" for i in range(48, 58): self.lis_all_code.append(chr(i)) for i in range(65, 91): self.lis_all_code.append(chr(i)) self.lis_all_code.append(chr(i + 32)) def add_line(self, pen): """添加干扰线,要传入画笔""" for i in range(randint(4, 8)): # 随机生成四到八条干扰线 # 颜色随机 randColor = (randint(0, 255), randint(0, 255), randint(0, 255)) # 起点随机 start = (randint(0, self.size[0]), randint(0, self.size[1])) # 终点随机 end = (randint(0, self.size[0]), randint(0, self.size[1])) # 画一条线 pen.line([start, end], fill=randColor) def add_point(self, pen): """添加干扰点,传入画笔""" for i in range(randint(20, 24)): # 生成随机个干扰点 # 颜色随机 randColor = (randint(0, 255), randint(0, 255), randint(0, 255)) # 起点随机 point = (randint(0, self.size[0]), randint(0, self.size[1])) pen.point(point, fill=randColor) def getImg(self): """获取验证码图片""" img = Image.new("RGBA", self.size, self.bgcolor) # 创建一个图片 pen = ImageDraw.Draw(img) # 创建一个画笔 font = ImageFont.truetype(self.font, 25) # 实例化字体 for i in range(self.n): # 把文字写入图片中 string = choice(self.lis_all_code) # 生成随机的验证码 self.ret += string # 添加到结果中 font_color = (randint(0, 255), randint(0, 255), randint(0, 255)) # 颜色随机 # 验证码的初始横轴偏移量 x_start = randint(2, 5) # 验证码的初始纵轴偏移量 y_start = 0 x = x_start + i * (self.size[0] // self.n) # 获取每个字横坐标的位置 y = randint(y_start, self.size[1] // 2) - 3 # 获取每个字纵坐标的位置 pen.text([x, y], string, font=font, fill=font_color) # 写入每一个字 if self.draw_line: # 如果要加干扰点线 self.add_line(pen) self.add_point(pen) return img def main(self): """入口函数""" img = self.getImg() # 获取图片 img.save(self.save_path) # 保存图片,因为里面有四色通道,所以要保存为png格式 ret = self.ret self.ret = "" # 重置 self.ret 的值 return ret # 同时要返回随机的字符串if __name__ == "__main__": c = Verification(4, True, (100, 36), r"C:\Windows\Fonts\simfang.ttf", (255, 255, 255), "verify.png") print(c.main())
2、 运行结果
关键词:
下一篇:最后一页
- 个人护理小家电市场结构迎变局 新兴渠道规模不容小觑
- 广州科技活动周进入预热 明日正式启动300多场主题活动接踵而来
- 深化重点领域信用建设 广州正式出台新型监管机制实施方案
- 女童不慎掉入20米深井 18岁小姨三次下井成功营救
- 西安3个区域12月28日起每日开展全员核酸 官方提倡民众居家健身
- 浙江乐清一核酸检测结果异常人员 复采复检为阴性
- 浙江本轮疫情报告确诊病例490例 提倡“双节”非必要不出省
- 西安警方通报6起涉疫违法案件
- 西安新一轮核酸筛查日检测能力达160万管
- 西安市累计报告本土确诊病例811例
-
5月15日盘前重要市场新闻|全球热资讯
>>A股加速优胜劣汰投资交易要有确定性逻辑 有人走,有人来,上市公司“有进有出”成为资本市场常态。数
-
世界即时:舟过安仁古诗翻译_舟过安仁古诗
1、《舟过安仁》南宋:杨万里一叶渔船两小童,收篙停棹坐船中。2、怪生无雨都张伞,不是遮头是使风。3、译
-
西藏旅游强劲复苏
走在拉萨八廓街上,身着带有浓郁特色的藏装,画着精致的妆容,西安游客王莉拍了一组写真,花了300多元。“
-
环球快讯:B站公布新专利,可在车载场景下语音发布弹幕
IT之家5月14日消息,上海哔哩哔哩科技有限公司申请的“弹幕处理方法及装置”专利公布,实现了在车载场景的
-
一起来看流星雨歌曲插曲有哪些_一起来看流星雨主题曲_世界关注
1、让我为你唱首歌演唱:俞灏明、魏晨、朱梓骁、张翰曲:严丹丹、刘佳词:严丹丹全世界都陪你听着这是爱你
-
印泥用什么洗能洗干净(印泥用什么可以清洗掉)-环球速递
1、对红色颜料,可在加苛性钾的酒精温液里洗除。但对粘胶纤维织物,只能使用酒精而禁用苛性钾。2、当毛料或
-
申花体育总监吴金贵缅怀起了当年作为助教与佩特科维奇共事的时光 焦点热门
北京时间今天凌晨,前上海申花主帅伊利亚-佩特科维奇因感染新冠而不幸去世,享年75岁。在接受采访时,申花
-
漫评CBA:辽宁队卫冕无悬念
中国青年报客户端北京5月14日电(中青报·中青网记者杨屾)94:68,辽宁男篮5月13日晚以明显优势再胜浙江男
-
火星全球勘测者探测器_关于火星全球勘测者探测器介绍 天天热文
1、“火星全球勘测者”(MarsGlobalSurveyor,MGS)探测器是NASA“火星测绘新计划”的首
-
皮划艇世界杯匈牙利站 中国选手夺得女子双人划艇500米冠军
北京时间昨天(13日)下午,在2023年皮划艇静水世界杯第一站——匈牙利站的争夺中,中国队的徐诗晓、孙梦雅
X 关闭
接单日记(四)验证码图片生成-当前简讯
港股午评:恒指涨0.14% 锂电池股走强
“北向互换通”正式启动|世界观速讯
当前视点!鸡蛋期货周报 节后现货价格维持偏弱走势
焦点简讯:沪锡期价午盘止涨跌超1% 沪镍涨超4%
X 关闭
焦点讯息:水发燃气董秘回复:根据《上海证券交易所股票上市规则》的规定
西安警方完成研考安保工作 共出动警力逾1.3万人次
得知西安疫情防控“升级” 男子夜骑共享单车回咸阳淳化
中国医生将任SIU主席背后:从追随者同行者到引领者
海南省通报政法队伍教育整顿成果