图像的基本处理六(绘制验证码)

✨✨✨

感谢优秀的你打开了小白的文章

希望在看文章的你今天又进步了一点点,离美好生活更近一步!

目录

往期回顾

知识储备

代码生成

完整代码

 复杂应用


往期回顾

图像的基本处理(一) (1条消息) 图像基本处理(一)_am_student的博客-CSDN博客
图像的基本处理(二) (1条消息) 图片的基本处理(二)_am_student的博客-CSDN博客
图像的基本处理(三) (1条消息) 图像的基本处理(三)_am_student的博客-CSDN博客
图像的基本处理(四) (1条消息) 学完这些图像处理,我拿去给女友修了图..._am_student的博客-CSDN博客

知识储备

Image.new(): 这个方法可以生成一张图片,有三个参数。
mode:颜色空间模式,可以是'RGBA','RGB','L'等等模式
size:图片尺寸,接收一个两个整数的元组
color:图片的填充颜色,可以是red,green等,也可以是rgb的三个整数的元组。也就是背景颜色

代码生成

 获取对象

draw_obj=ImageDraw.Draw(img)
def get_color():
    return (random.randint(200,255),random.randint(200,255),random.randint(200,255))
for x in range(width):
    for y in range(height):
        draw_obj.point((x,y),fill=get_color())

生成随机字母

def get_char():
    return chr(random.randint(65,90))
font=ImageFont.truetype('simsun.ttc',36)

 绘制字母

for i in range(4):
    draw_obj.text((10+i*20,40),get_char(),font=font,fill=(255,0,0))

绘制干扰线

draw_obj.line((0,0,100,100),fill='red',width=5)
img.show()

完整代码

from PIL import Image,ImageDraw,ImageFont
import random
width,height=100,100
img=Image.new('RGB',(width,height),(255,255,255))
#获取draw_obj对象
draw_obj=ImageDraw.Draw(img)
def get_color():
    return (random.randint(200,255),random.randint(200,255),random.randint(200,255))
for x in range(width):
    for y in range(height):
        draw_obj.point((x,y),fill=get_color())

#生成随机的字母
def get_char():
    return chr(random.randint(65,90))
font=ImageFont.truetype('simsun.ttc',36)
#绘制随机字母
for i in range(4):
    draw_obj.text((10+i*20,40),get_char(),font=font,fill=(255,0,0))

#绘制干扰线
draw_obj.line((0,0,100,100),fill='red',width=5)
img.show()

 结果展示:

图像的基本处理六(绘制验证码)_第1张图片

 复杂应用

#coding=utf-8
import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter
font_path = 'SIMLI.TTF'
#生成几位数的验证码
number = 4
#生成验证码图片的高度和宽度
size = (100,30)
#背景颜色,默认为白色
bgcolor = (255,255,255)
#字体颜色,默认为蓝色
fontcolor = (0,0,255)
#干扰线颜色。默认为红色
linecolor = (255,0,0)
#是否要加入干扰线
draw_line = True
#加入干扰线条数的上下限
line_number = (1,5)
 
#用来随机生成一个字符串
def gene_text():
    source = list(string.ascii_letters)
    for index in range(0,10):
        source.append(str(index))
    return ''.join(random.sample(source,number))#number是生成验证码的位数
#用来绘制干扰线
def gene_line(draw,width,height):
    begin = (random.randint(0, width), random.randint(0, height))
    end = (random.randint(0, width), random.randint(0, height))
    draw.line([begin, end], fill = linecolor)
 
#生成验证码
def gene_code():
    width,height = size #宽和高
    image = Image.new('RGBA',(width,height),bgcolor) #创建图片
    font = ImageFont.truetype(font_path,25) #验证码的字体
    draw = ImageDraw.Draw(image)  #创建画笔
    text = gene_text() #生成字符串
    font_width, font_height = font.getsize(text)
    draw.text(((width - font_width) / number, (height - font_height) / number),text,
            font= font,fill=fontcolor) #填充字符串
    if draw_line:
        gene_line(draw,width,height)
    # image = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR)  #创建扭曲
    image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR)  #创建扭曲
    image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #滤镜,边界加强
    image.save('idencode.png') #保存验证码图片
if __name__ == "__main__":
    gene_code()

结果展示:

 代码可从公众号获取:回复“图像处理”即可

图像的基本处理六(绘制验证码)_第2张图片 

你可能感兴趣的:(图像处理,人工智能,图像处理,计算机视觉,python,pillow)