制作简单图片验证码

一、PIL库基本操作

from PIL import Image,ImageFilter  #安装方法 pip install pillow

image_file =Image.open('pikaqiu.jpg')
image_file = image_file.convert('1')  #更改图像模式
image_file.show()   #打开图片,显示图片
image_file.save('qiuqi2.jpg')     #改名+另存为

#图片缩放
im=Image.open('pikaqiu.jpg')
#获取尺寸
w,h =im.size
print(w,h)
# im.thumbnail((w//2,h//2))

im=im.filter(ImageFilter.BLUR)  #图片模糊处理
im.show()

二、开始制作验证码

from PIL import Image,ImageFilter,ImageFont,ImageDraw   #ImageFont 导入字体颜色  ImageDraw新建绘图对象
import random
import string



#随机字母
def rndChar():
    return chr(random.randint(65,90))  #整数对应的ascii码A-Z的范围

#随机字母和数字
def getrandl(num,many):   #num 代表位数  ,many 代表个数
    for x in range(many):
        s=''
        for i in range(num):
            n = random.randint(1,2) #n=1 生成数字 n =2 生成字母
            if n ==1:
                numb =random.randint(0,9)
                s += str(numb)
            else:
                s+=str(random.choice(string.ascii_letters))

    return s

#随机生成RGB值
def rndColor():
    return(random.randint(64,255),random.randint(64,255),random.randint(64,255))

#随机背景色
def rndColor2():
    return(random.randint(32,127),random.randint(32,127),random.randint(32,127))


width = 60*4  #图像宽度  *4是四个字母
height =60

image=Image.new('RGB',(width,height),(255,255,255))#最后的元组是RGB每个的值
# font =ImageFont.truetype('Monaco.ttf',36)  #指定字体和大小   font =ImageFont.truetype('Monaco.ttf',36)报错显示没有找到这个字体
#解决方法:到C:\Windows\Fonts下,复制喜欢的字体到py文件下
font =ImageFont.truetype('tahoma.ttf',36)
# 添加画笔
draw =ImageDraw.Draw(image)

#填充每个像素点
for x in range(width):
    for y in range(height):
        draw.point((x,y),fill=rndColor())


for t in range(4):
    draw.text((60*t+10,10),getrandl(1,4),font=font,fill=rndColor2())   #60*x+10是写第一个字母起笔位置为从左往右10长度,10是从上往下的高度,这样开始写第一个 字母

#加上模糊处理
image=image.filter(ImageFilter.BLUR)

image.show()

 

posted on 2019-05-11 12:35  ZY_LO  阅读(493)  评论(0编辑  收藏  举报

导航