✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”
目录
往期回顾
知识储备
代码生成
完整代码
复杂应用
图像的基本处理(一) | (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()
结果展示:
#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()
结果展示:
代码可从公众号获取:回复“图像处理”即可