使用Python生成一张用于登陆验证的字符图片
2018-01-03 17:45
786 查看
Python Pillow库的简单使用
使用Python生成一张用于登陆验证的字符图片, 代码使用了Pillow,Anaconda已经默认安装此库,如果你使用的是官方版的Python需要先下载此库。代码如下,在注释中予以说明:
from PIL import Image, ImageDraw, ImageFont, ImageFilter import random #定义一个生成随机字符的函数 ASII码表 48-57: 0-9 65-90: A-Z 97-122: a-z def randChar(): i = random.randint(0, 2) if i == 0: return chr(random.randint(65, 90)) #大写字符 elif i == 1: return chr(random.randint(97, 122)) #小写字符 else: return chr(random.randint(48,57)) #数字 #定义一个生成图片的颜色(颜色尽量浅,以免字符用户都看不清楚) def randColor1(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) #再定义一个生成字体的颜色(颜色尽量深,在尽可能无法被机器识别的前提下,让用户看清楚) def randColor2(): return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) #生成图片宽度 width = 60 * 8 #生成图片高度 height = 60 #创建image对象 image = Image.new('RGB', (width, height), (255, 255, 255)) #创建Font对象 font = ImageFont.truetype('arial.ttf', 36) #创建Draw对象 draw = ImageDraw.Draw(image) #画图 for x in range(width): for y in range(height): draw.point((x, y), fill = randColor1()) #point两个参数 第一个是坐标(tuple) 第二个是颜色(C语言3个,横纵坐标算2个) #加字 for t in range(8): draw.text((60 * t + random.randint(0, 9) * randomrandint(0,5), random.randint(0, 9)), randChar(), font = font, fill = randColor2()) #draw.text 4个参数 坐标 字符 字体 颜色 #第一个参数大量使用randint 尽可能使得字变得散 #添加模糊效果 image = image.filter(ImageFilter.BLUR) image.save('code.jpg', 'jpeg')
有可以改进的地方,把
import random改成
from random import randint
就可以不在
randint指明random了。
无注释纯净版:
from PIL import Image, ImageDraw, ImageFont, ImageFilter from random import randint def randChar(): i = randint(0, 2) if i == 0: return chr(randint(65, 90)) elif i == 1: return chr(randint(97, 122)) else: return chr(randint(48,57)) def randColor1(): return (randint(64, 255), randint(64, 255), randint(64, 255)) def randColor2(): return (randint(32, 127), randint(32, 127), randint(32, 127)) width = 60 * 8 height = 60 image = Image.new('RGB', (width, height), (255, 255, 255)) font = ImageFont.truetype('arial.ttf', 36) draw = ImageDraw.Draw(image) for x in range(width): for y in range(height): draw.point((x, y), fill = randColor1()) for t in range(8): draw.text((60 * t + randint(0, 9) * randint(0,5), randint(0, 9)), randChar(), font = font, fill = randColor2()) image = image.filter(ImageFilter.BLUR) image.save('code.jpg', 'jpeg')
结果:
相关文章推荐
- javaweb之response随机生成图片验证码加载到web页面中(本实例使用了禁止浏览器缓存头),并且单击使用javascript换图片
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
- 转:用三段 140 字符以内的代码生成一张 1024×1024 的图片
- MVC 生成安全验证码(例:用于登陆验证)(转)
- python练手项目(1)——字符图片生成
- 用三段 140 字符以内的代码生成一张 1024×1024 的图片
- 使用python生成excel格式的图片
- 使用python调用zxing库生成二维码图片详解
- python tornado使用流生成图片
- 用三段 140 字符以内的代码生成一张 1024×1024 的图片
- python 生成字符图片
- 用php做的一张图片用于做验证可能会比较好用
- python3使用Image库由rgb值生成jpg图片
- 用三段 140 字符以内的代码生成一张 1024×1024 的图片
- V4L2编程使用USB摄像头生成一张图片
- Nodejs中使用captchapng模块生成图片验证码
- 使用PYTHON登陆验证网站的几种方式!
- python爬虫爬取指定用户微博图片及内容,并进行微博分类及使用习惯分析,生成可视化图表
- 使用python调用zxing库生成二维码图片
- MVC 生成安全验证码(例:用于登陆验证) 方法2