几行代码批量生成authCode

整体步骤:

1.创建图片

2.创建画笔

3.在图片上生成点

4.在图片上画线

5.在图片在画圆

6.在图片在写文本

7.在图片在生成指定字体的文本

代码奉上

#!/usr/bin/env python
# author:Torre Yang
# datetime:2018/9/9 10:18
# 改进:1.自适应调整验证码的数量;2.随机输出字符
import random
import logging
logging.basicConfig(level=logging.INFO)
# 导入Image,ImageDraw,ImageFont模块
from PIL import Image, ImageDraw, ImageFont # strNum 为想要生成的字符数; num为生成的数量
def authCodeMaker(strNum, num):
while(num):
# 定义使用Image类实例化一个长为30 * (strNum - 1),宽为30px,基于RGB的(255,255,255)颜色的图片; 通过控制图片长度来限制字符数量
img1 = Image.new(mode="RGB", size=(30 * (strNum - 1), 30), color=(255, 255, 255))
# 实例化一支画笔
draw1 = ImageDraw.Draw(img1, mode="RGB")
# 定义要使用的字体 ,字体放置程序统计目录目录
font1 = ImageFont.truetype("ALGER.TTF", 28)
# 生成四个字符的验证码, 保存字符串生产文件名
strList = []
for i in range(strNum):
# 每循环一次,从a到z中随机生成一个字母或数字
# 65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
# str把生成的数字转换成字符串; 可以将0过滤掉; 由于0和字母O相差不大
allstr = [chr(random.randint(97, 122)), chr(random.randint(65, 90)), str(random.randint(1, 9))]
allstr = ''.join(allstr)
char1 = random.choice(allstr)
strList.append(char1)
# 每循环一次重新生成随机颜色
color1 = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 把生成的字母或数字添加到图片上
# 图片长度为30 * (strNum - 1),要生成num个数字或字母则每添加一个,其位置就要向后移动24px
draw1.text([i * 24, 0], char1, color1, font=font1)
# 把生成的图片保存为"strList.png"格式; TIPS:创建你需要保存文件的位置
with open('E:\PyCharmProjects\APP-UI\\authCode\\'+''.join(strList)+".png", "wb") as f:
img1.save(f, format="png")
num = num - 1
logging.info('剩余%d张待生成: '%num +''.join(strList)+'.png') # 测试
if __name__=='__main__':
authCodeMaker(4, 1000)

附件:代码地址 https://github.com/Testworm/app_ui/blob/master/authCode.py

实例:

最新文章

  1. 工作记录 java
  2. [转]给 C# 开发者的代码审查清单
  3. 安卓SeekBar
  4. 获取与Url链接相关的信息
  5. 微信小程序0.11.122100版本新功能解析
  6. mysql行锁和表锁
  7. bootstrap-7
  8. LeetCode(三)
  9. 让TabelView视图中自定义的Toolbar固定(不随cell的移动而移动)
  10. (转)go rabbitmq实践
  11. hdfs基本操作
  12. ethereum/EIPs-191 Signed Data Standard
  13. Jersey入门——注解的使用
  14. Doxygen简单经验谈。。。
  15. python偏函数的运用
  16. javascript 判断数据类型
  17. 关于iframe的父页面调取子页面里的事件(父往子里传)
  18. Mysql中的Btree与Hash索引
  19. TCP报文大小
  20. DOM查询

热门文章

  1. java开发实习生面试经历
  2. python 实现 PC 客户端自动化快速入门:pywinauto !
  3. pycharm连接远程python的开发环境
  4. python怎么连接MySQL(附源码)
  5. [考试反思]1113csp-s模拟测试113:一念
  6. react 项目引入路由
  7. C语言和其他语言的区别
  8. Java描述设计模式(12):外观模式
  9. Gradle如何在任务失败后继续构建
  10. C#_服务器EXCEL模板文件导出