目录
一、ImageChops模块
1.ImageChops模块包含多个实现图片合成函数,通过计算通道种像素值来实现
2.相关函数的调试:
from PIL import Image,ImageChops
#打开图片
img1=Image.open('cat.jpg')
img2=Image.open('girl.jpg')
#对两张图片进行算数加法运算
#ImageChops.add(img1,img2).show()
#减法运算
#ImageChops.subtract(img1,img2).show()
#变暗函数darker()
#ImageChops.darker(img1,img2).show()
#变亮函数lighter()
#ImageChops.lighter(img1,img2).show()
#相互叠加函数multiply()
#ImageChops.multiply(img1,img2).show()
#screen()函数两图投影效果
#ImageChops.screen(img1,img2).show()
#反色invert()
#ImageChops.invert(img2).show()
#比较函数difference()
ImageChops.difference(img1,img2).show()
二、ImageEnhance模块
1.ImageEnhance模块包含多个用于增强图像效果的函数,主要用于调整图像的色彩、对比度、亮度和清晰度,使用模块时,首先创建对应的增强调整器,再调用调整器输出函数
2.调整图像色彩:
from PIL import Image,ImageEnhance
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取色彩调整器
img_color=ImageEnhance.Color(img)
imgb=img_color.enhance(1.5)
img_output.paste(imgb,(w,0))
#减弱色彩
imgc=img_color.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()
3.调整图像亮度:
from PIL import Image,ImageEnhance
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取亮度调整器
img_brighter=ImageEnhance.Brightness(img)
imgb=img_brighter.enhance(1.5)
img_output.paste(imgb,(w,0))
#降低亮度
imgc=img_brighter.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()
4、像素点运算实现图像整体变亮(暗)
from PIL import Image
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
img_output.paste(img,(0,0))
#使用point()函数对像素点进行运算
#整体提亮
imgb=img.point(lambda i:i*1.5)
#整体变暗
imgc=img.point(lambda i:i*0.7)
img_output.paste(imgb,(w,0))
img_output.paste(imgc,(2*w,0))
img_output.show()
三、ImageDraw模块
1.ImageDraw模块实现了绘图功能,可以通过创建图片方式绘制2D图像,也可以在原有图片上进行绘图,首先需要创建一个ImageDraw.Draw对象,再引用创建的Draw对象进行绘图
2.创建一个图片进行绘制:
from PIL import Image,ImageDraw,ImageFont
#创建一幅白色背景图像
img=Image.new('RGB',(300,200),'white')
#绘制矩形
draw_obj=ImageDraw.Draw(img)
draw_obj.rectangle((50,50,150,150),outline='blue',fill='pink')
font=ImageFont.truetype('SIMLI.TTF',20)
draw_obj.text((70,80),'Hello!',fill='black',font=font)
img.show()
3.在原有图片上进行绘制:
from PIL import Image,ImageDraw
img=Image.open('girl.jpg')
w,h=img.size
#创建绘图对象
draw_obj=ImageDraw.Draw(img)
draw_obj.arc((0,0,w-1,h-1),0,360,fill='blue')
img.save('circle.jpg')
四、ImageFont的使用
ImageFont模块是实现对字体和字型的处理
from PIL import Image,ImageDraw,ImageFont
img=Image.open('girl.jpg')
draw_obj=ImageDraw.Draw(img)
#font=ImageFont.load_default()#加载一个默认字体
font=ImageFont.truetype('SIMYOU.TTF',40)#加载中文
draw_obj.text((40,50),"你好,世界!",font=font,fill='black')
img.show()
五、相关实例
1.绘制十字:
from PIL import Image,ImageDraw
img=Image.open('f.jpg')
draw_obj=ImageDraw.Draw(img)
w,h=img.size
draw_obj.line((0,0,w,h),fill='blue',width=5)
draw_obj.line((0,h,w,0),fill='blue',width=5)
img.show()
2.绘制九宫格:
from PIL import Image,ImageDraw
w,h=300,300
img=Image.new('RGB',(w,h),'white')
draw_obj=ImageDraw.Draw(img)
def get_color(x,y):
a=x//100+y//100
if a==0:
return (255,0,0)
elif a==1:
return (255,255,0)
elif a==2:
return (255,255,255)
elif a==3:
return (255,0,255)
elif a==4:
return(0,0,255)
else:
return (0,0,0)
for x in range(w):
for y in range(h):
draw_obj.point((x,y),fill=get_color(x,y))
img.show()
3、将图片中黄色变成红色:
from PIL import Image,ImageDraw
img=Image.open('f.jpg')
draw_obj=ImageDraw.Draw(img)
w,h=img.size
def get_color(oldColor):
#将黄色变成红色
#获取每个通道的值
if oldColor[0]>60 and oldColor[1]>60:
return (oldColor[0],0,oldColor[2])
else:
return oldColor
for x in range(w):
for y in range(h):
oldColor=img.getpixel((x,y))
draw_obj.point((x,y),fill=get_color(oldColor))
img.show()