关于pillow库,可以提供p图像处理功能
image模块:可以从文件中加载图像,或者处理其他图像
使用image打开一幅图片
#导入 Image 模块
from PIL import Image
#打开图片
im=Image.open('修狗.png')
#显示图片
im.show()
#查看图片的信息
print('图像格式:',im.format)
print('图像大小,格式是(宽度,高度):',im.size)
print('图像宽度:',im.width,'图像高度:',im.height)
print('读取坐标在(100,100)处的像素的信息:',im.getpixel((100,100)))
关于混合处理有blend函数进行透明度的混合处理
其中代码如下‘
from PIL import Image
img1=Image.open('修狗1.jpg').convert(mode="RGB")
img2=Image.new("RGB",img1.size,"red")
# #混合两幅图
Image.blend(img1,img2,alpha=0.5).show()
笼罩混合处理
pillow中可以用函数composite()进行实现
代码如下
from PIL import Image
img1=Image.open('img1.jpg')
img2=Image.open('img2.jpg')
img2=img2.resize(img1.size)
r,g,b=img2.split()
Image.composite(img2,img1,b).show()
复制和缩放
复制:Image.copy()函数实现复制图片
缩放:用eval()函数 fun()函数计算图片像素并且进行返回
缩放图片 代码如下
from PIL import Image
img=Image.open('img2.jpg')
Image.eval(img,lambda i:i*2).show(
缩放成指定大小
from PIL import Image
img=Image.open('img2.jpg')
imgb=img.copy()
#缩放为指定大小(220,168)
imgb.thumbnail((220,168))
imgb.show()
粘贴和裁剪:函数paste()函数
代码如下
from PIL import Image
img=Image.open('修狗.png')
#复制图片
imgb=img.copy()
imgc=img.copy()
#剪切图片
region=imgb.crop((5,5,120,120))
#粘贴图片
imgc.paste(region,(30,30))
imgc.show()
图片旋转
pillow库中的rotate函数
代码如下
from PIL import Image
img=Image.open('修狗.png')
img.rotate(90).show()
格式转换covert()
对图片进行转换操作
from PIL import Image
#打开指定的图片
img1=Image.open('修狗.png')
img2=img1.copy()
#convert()
img_convert=img2.convert('CMYK')
# img_convert.show()
#transpose()
img_transpose=img2.transpose(Image.ROTATE_90)
img_transpose.show()
分离和合并 :函数split
from PIL import Image
img1=Image.open('修狗1.jpg')
img2=Image.open('修狗2.jpg')
img2=img2.resize(img1.size)
r1,g1,b1= img1.split()
r2,g2,b2= img2.split()
tmp=[r1,g2,b1]
img = Image.merge("RGB",tmp)
img.show()
滤镜:fillter函数
from PIL import Image,ImageFilter
#使用函数 filter()实现滤镜效果
img=Image.open('bjsxt.png')
b=img.filter(ImageFilter.GaussianBlur)
b.show()
ImageFilter 模块 实现滤镜功能,创建图片特效
比较常用的预定义滤镜如下:
BLUE:模糊
CONTOUR:轮廓
DETAIL:详情
EDGE_ENHANCE:边缘增强
EDGE_ENHANCE_MORE:边缘更多增强
EMBOSS:浮雕
FIND_EDGES:寻找边缘
SHARPEN:锐化
SMOOTH:平滑
而常用的自定义滤镜函数有如下
使用 ImageFilter 对指定图片实现滤镜特,其中主要用于制作特效合成图片等操作
相加函数 add()功能是对两张图片进行算数加法运算
代码如下
from PIL import Image,ImageFilter
#打开图片
imga=Image.open('img2.jpg')
w,h=imga.size
#创建图像区域
img_output=Image.new('RGB',(2*w,h))
#将创建的部分粘贴图片
img_output.paste(imga,(0,0))
#创建列表存储滤镜
fltrs=[]
fltrs.append(ImageFilter.EDGE_ENHANCE)#边缘强化滤镜
fltrs.append(ImageFilter.FIND_EDGES) #查找边缘滤镜
fltrs.append(ImageFilter.GaussianBlur)#高斯模糊滤镜
for fltr in fltrs:
r=imga.filter(fltr)
img_output.paste(r,(w,0))
img_output.show()
ImageChops 模块:实现图片合成的模块,可以用来制作特效合成图片等操作,常用的内置函数如下
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('修狗1.jpg')
imgb=Image.open('修狗2.jpg')
#对两张图片进行算术加法运算
ImageChops.add(imga,imgb,1,0).show()
减法函数 subtract()
代码如下
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('修狗.jpg')
imgb=Image.open('修狗.jpg')
darker函数 变暗函数:功能是比较两个图片的像素,取两张图片中对应像素的较小值,所 以合成时两幅图像中对应位置的暗部分得到保留,而去除亮部分。
代码如下:
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('修狗1.jpg')
imgb=Image.open('修狗2.jpg')
#使用变暗函数 darker()
ImageChops.darker(imga,imgb).show()
light函数与变暗函数相反 用法一样 我就不多赘述了
ImageEnhance 模快
内置的 ImageEnhance 模块中包含了多个用于增强图像效果的函数,主要用来调整图像 的色彩、对比度、亮度和清晰度等,感觉上和调整电视机的显示参数一样。在模块 ImageEnhance 中,所有的图片增强对象都实现一个通用的接口。这个接口只包 含如下一个方法。 方法 enhance()会返回一个增强的 Image 对象,参数 factor 是一个大于 0 的浮点数,1 表 示返回原始图片。
当在 Python 程序中使用模块 ImageEnhance 增强图像效果时,需要首先创建对应的增强 调整器,然后调用调整器输出函数,根据指定的增强系数(小于 1 表示减弱,大于 1 表示增 强,等于 1 表示原图不变)进行调整,最后输出调整后的图像。 在模块 ImageEnhance 中,常用的内置函数如下所示:
(1)ImageEnhance.Color(image ):功能是调整图像色彩平衡,相当于彩色电视机的 第 14 页 色彩调整,实现了上边提到的接口的 enhance 方法。
(2)ImageEnhance.Contrast(image ):功能是调整图像对比度,相当于彩色电视机的 对比度调整。
(3)ImageEnhance.Brightness(image ):功能是调整图像亮度。
(4)ImageEnhance.Sharpness(image ):功能是调整图像清晰度,用于锐化/钝化图片。 锐化操作的 factor 是 0~2 之间的一个浮点数。当 factor=0 时,返回一个模糊的图片对 象;当 factor=2 时,返回一个锐化的图片对象;当 factor=1 时,返回原始图片对象。
【示例】使用 ImageEnhance 实现图像色彩平
from PIL import Image
from PIL import ImageChops,ImageEnhance
#打开图片
imga=Image.open('blend1.jpg')
w,h=imga.size
#创建图像区域
img_output=Image.new('RGB',(2*w,h))
#将创建的部分粘贴图片
img_output.paste(imga,(0,0))
#调整图像色彩平衡
nhc=ImageEnhance.Color(imga)
for ratio in [0.6,1.8]:#减弱和增强两个系数
b=nhc.enhance(ratio)#增强处理
img_output.paste(b,(w,0))#粘贴修改后的图像
img_output.show()
【示例】使用 ImageEnhancee 实现图像亮
from PIL import Image
from PIL import ImageChops,ImageEnhance
#打开图片
imga=Image.open('F24B2B9697459C88B9E0964AA84512C7.jpg')
w,h=imga.size
#创建图像区域
img_output=Image.new('RGB',(2*w,h))
#将创建的部分粘贴图片
img_output.paste(imga,(0,0))
#调整图像的亮度
nhb=ImageEnhance.Brightness(imga)
for ratio in [0.6,1.8]:#减弱和增强两个系数
b=nhb.enhance(ratio)#增强处理
img_output.paste(b,(w,0))#粘贴修改后的图像
img_output.show()
效果如图所示
ImageDraw 模块
ImageDraw 模块实现了绘图功能。可以通过创建图片的方式来绘制 2D 图像;还可以在 原有的图片上进行绘图,已达到修饰图片或对图片进行注释的目的。 在 ImageDraw 模块绘图时需要首先创建一个 ImageDraw.Draw 对象,并且提供指向文件 的参数。然后引用创建的 Draw 对象方法进行绘图。最后保存或直接输出绘制的图像。
可以进行绘制直线,圆弧,椭圆,弦,扇形,多边形,矩形,文字,点
from PIL import Image,ImageDraw
a=Image.new('RGB',(200,200),'white')
#新建一幅白色背景的图像
drw=ImageDraw.Draw(a)
drw.rectangle((50,50,150,150),outline='red')
drw.text((60,60),'First Draw...',fill='green')
a.show()
ImageFont 模块
ImageFont 的功能是实现对字体和字型的处理。比较常用的内置函数如下所示
(1)load():从指定的文件中加载一种字体,该函数返回对应的字体对象。
(2)load_path():和函数 load()一样,但是如果没有指定当前路径,就会从文件 sys.path 开 始查找指定的字体文件。语法格式如下:
(3)truetype():有两种定义格式。第 1 种格式的功能是加载一个 TrueType 或者 OpenType 字体文件,并且创建一个字体对象。在 Windows 系统中,如果指定的文件不存在,加载器 就会顺便看看 Windows 的字体目录下它是否存在
(4)load_default():功能是加载一种默认的字体。
(5)getsize():返回给定文本的宽度和高度,返回值是一个二元组。具体语法格式如下:
from PIL import Image,ImageDraw,ImageFont
im = Image.open("bjsxt.png")
draw = ImageDraw.Draw(im)
ft=ImageFont.truetype('SIMYOU.TTF',16)
draw.text((30,30),u'图像处理库 PIL',font=ft,fill='red')
ft=ImageFont.truetype('C:\\Windows\\Fonts\\SIMLI.TTF',20)
draw.text((30,80),u'图像处理库 PIL',font=ft,fill='blue')
ft=ImageFont.truetype('C:\\Windows\\Fonts\\STXINGKA.TTF',30)
draw.text((30,130),u'图像处理库 PIL',font=ft,fill='green')
im.show()
效果如下