快乐python 零基础也能P图 —— PIL库
python pil
pil (python image library) 库是python 语言的一个第三方库,pil库支持图像存储、显示和处理,能够处理几乎所有格式的图片。
一、pil库简介
1. pil库主要有2个方面的功能:
(1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。
(2) 图像处理:图像基本处理、像素处理、颜色处理等。
2. pil拥有多个类,此处就其中的image类、imagefilter类、imageenhance类做简单介绍。
二、安装库函数
pip install pillow
注:由于本机已经安装了pil库(安装时使用pillow),所以以更新为例,使用 -u 标签可实现更新。
三、使用库函数image类 —— 基本图像处理
1. 调用image类
from pil import image
2. image类关于图像读取与创建
方法 |
说明 |
image.open(filename) |
加载图像文件 |
image.new(mode,size,color) |
根据给定参数创建新图像 |
image.open(stringio.stringio(buffer)) |
从字符串中获取图像 |
image.frombytes(mode,size,color) |
根据像素点创建新图像 |
image.verify() |
对图像完整性进行检查,返回异常 |
3. image类的常用属性
方法 |
说明 |
image.format |
图像格式或来源,若图像不是从文件读取,返回none |
image.mode |
图像的色彩模式,’l’为灰度模式,’rgb’为真彩色图像,’c(青)m(品红)y(黄)k(黑)’为出版图像 |
image.size |
图像的宽度和高度,单位是像素(px),返回值为元组类型 |
image.palette |
调色板属性,返回imagepalette类型 |
4.image类的序列图像操作方法
方法 |
说明 |
image.seek(frame) |
跳转并返回图像中的指定帧 |
image.tell() |
返回当前帧的序号 |
5.image类的图像旋转和缩放方法
方法 |
说明 |
image.resize(size) |
返回按size大小调整图像的副本 |
image.rotate(angle) |
返回按angle角度旋转图像的副本 |
6.image类的图像转换和保存方法
方法 |
说明 |
image.save(filename,format) |
将图像保存为filename文件名,format格式 |
image.convert(mode) |
将图像转换为mode模式 |
image.thumbnail(size) |
创建图像的缩略图,size是缩略图尺寸的元组 |
example_1:
from pil import image nest = image.open("d:\\nest.jpg") r,g,b = nest.split() #获取原图的rgb通道的颜色值 newb = b.point(lambda i:i*1.1) #将b通道的颜色值增强 nest1 = image.merge(nest.mode,(b,g,r)) nest1.save("d:\\nest_1.jpg")
原图与效果图对比:
7.image类的图像像素和通道处理方法
方法 |
说明 |
image.point(func) |
根据函数func的功能对每个元素进行运算,返回图像副本 |
image.split() |
根据grb图像的每个颜色通道,返回图像副本 |
image.merge(mode,bands) |
合成通道,其中mode为色彩,bands为新的色彩通道 |
image.blend(im1,im2,alpha) |
将2张图片im1和im2按照公式插值后生成新图像 公式:im1*(1.0 - alpha) + im2*alpha |
四、使用库函数imagefilter类 —— 图像过滤
1.调用imagefilter类
from pil import imagefilter
2. imagefilter类预定义图像过滤方法
方法 |
说明 |
imagefilter.blur |
图像的模糊效果 |
imagefilter.contour |
图像的轮廓效果 |
imagefilter.detail |
图像的细节效果 |
imagefilter.edge_enhance |
图像的边界加强效果 |
imagefilter.edge_enhance_more |
图像的阈值边界加强效果 |
imagefilter.emboss |
图像的浮雕效果 |
imagefilter.find_edges |
图像的边界效果 |
imagefilter.smooth |
图像的平滑效果 |
imagefilter.smooth_more |
图像的阈值平滑效果 |
imagefilter.sharpen |
图像的锐化效果 |
example_2:
from pil import image from pil import imagefilter square = image.open("d:\\square.jpg") square1 = square.filter(imagefilter.contour) #选择轮廓效果 square1.save("d:\\square1.jpg")
原图:
效果图:
五、使用库函数imageenhance类 —— 图像增强
1. 调用imageenhance类
from pil import imageenhance
2.imageenhance类图像增强与滤镜方法
方法 |
说明 |
imageenhance.enhance(factor) |
对所选属性的数值增强factor倍 |
imageenhance.color(im) |
调整图像的颜色平衡 |
imageenhance.contrast(im) |
调整图像的对比度 |
imageenhance.brightness(im) |
调整图像的亮度 |
imageenhance.sharpness(im) |
调整图像的锐度 |
example_3:
from pil import image from pil import imageenhance gz = image.open("d:\\gz.jpg") gz1 = imageenhance.brightness(gz) #选择亮度 gz1.enhance(2).save("d:\\gz1.jpg") #将亮度增强2倍后保存
原图对比效果图: