图片验证码

import random ##随机模块,可以产生随机数
from PIL import Image,ImageDraw,ImageFont,ImageFilter
'''
PIL  需要通过pip install PIL 来安装
Image        负责图片处理
ImageDraw    负责处理画笔
ImageFont    负责处理字体
ImageFilter  负责处理滤镜
'''
#项目的思路:
    #1.定义一张图片
img = Image.new("RGB",(150,50),(255,255,255))
"""
第一个参数:代表我们采用的颜色
第二个参数:代表图片大小
第三个参数:具体图片的颜色
"""
    #2.创建画笔
draw = ImageDraw.Draw(img)
    #3.绘制线条和点
        #绘制线
for i in range(random.randint(1,10)):
    draw.line(
        #在绘制线条时有个特色:每条线都有两个点,每个点靠X,y两个值来确定位置
        [
            (random.randint(1,150),random.randint(1,150)),
            (random.randint(1, 150), random.randint(1, 150))
        ],
        fill = (0,0,0)
    )
        #绘制点
for i in range(1000):
    draw.point(
        [
            random.randint(1,150),
            random.randint(1,150)
        ],
        fill = (0,0,0)
    )
    #4.绘制我们的文字
        #我们的文字时随机的
        #一定的数字
        #定义我们要生成的随机数字和字母
font_list = list("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAMNBVCXZ0123456789")
c_chars = "".join(random.sample(font_list,5))
#绘制字体
font = ImageFont.truetype("simsun.ttc",32)
draw.text((5,5),c_chars,font = font,fill = "green")
"""
第一个参数:代表文字的位置,距离上和左的距离
第二个参数:代表文字和内容
第三个参数:字体和颜色
"""
#random.sample是在制定的列表当中随机的取出指定个元素
    #5.定义扭曲的参数
params = [
    1-float(random.randint(1,2))/100,
    0,
    0,
    0,
    1-float(random.randint(1,2))/100,
    float(random.randint(1,2))/50,
    0.001,
    float(random.randint(1,2))/50
]
    #6.使用滤镜
        #添加滤镜
img = img.transform((150,50),Image.PERSPECTIVE,params)
"""
第一个参数:扭曲的范围,
第二个参数:扭曲的样式
第三个参数:扭曲的参数
"""
        #进行扭曲
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
#调用
img.show()

猜你喜欢

转载自www.cnblogs.com/ArtisticMonk/p/8933867.html