Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
1)图像模块(Image.Image)
1. 使用 Image 类
PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。
要从文件加载图像,可以使用open( )函数,在Image模块中:
from PIL import Image
im = Image.open("E:/photoshop/1.jpg")
加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:
print(im.format, im.size, im.mode)
('JPEG', (600, 351), 'RGB')
format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
如果文件打开错误,返回 IOError 错误。
只要你有了 Image 类的实例,你就可以通过类的方法处理图像。
2. Image类的功能:
- Image.new(mode,size,color):使用给定的模式、大小和颜色创建新图像;大小以(宽度,高度)2 元组的形式给出,以像素为单位;颜色以单波段图像的单个值和多波段图像的元组(每个波段的一个值)给出,可以使用颜色名如‘red’也可以受用16进制#FF0000或者使用数字表示(255,0,0)
- Image.open(file,mode):读取图像文件头,mode只能是‘r’
- Image.blend(image1,image2,alpha):通过使用常量alpha在给定图像之间进行差值来创建新图像,两个图像必须具有相同的大小和模式,aplha为0则返回第一张图像的拷贝,为1则返回第二张图像的拷贝,可以去中间值来划分偏差如0.5
- Image.composite(image1,image2,mask):通过给定的图像之间进行差值,使用mask图像的响应像素作为alpha来创建新图像,mask可以具有的模式‘1’,‘L’,或者‘RGBA’
- Image.eval(image,function):function为接受一个整数参数的函数,将im的每个像素值分别传给func处理并返回最后的Image对象
- Image.merge(mode,bands):从多个单通道创建新图像,bands为图像的元组或列表
3. Image模块的方法:
Image类的实例具有以下方法,所有方法都会返回Image类的新实例,并保留生成的图像。
im.convert(mode):将图像转换为另一种模式,然后返回新图像
im.copy():拷贝图像
im.crop(box):从当前图像返回矩形区域的副本,box是一个4元祖,定义从左、上、右、下的像素坐标
im.filter(filter):返回由给定过滤器过滤的图像的副本
im.getbands():返回包含每个band的名称的元组。例如, RGB图像上的getband返回(“R”,“G”,“B”)
im.getbbox():计算图像中非零区域的边界框
im.getcolors(maxcolors):返回元祖的末排序列表
im.getdata():将图像的内容作为包含像素值的序列对象返回
im.getextrema():返回包含图像最小值和最大值的2元组,仅适用于单波段图像
im.getpixel(xy):返回给定位置的像素。如果图像是多层图像,则此方法返回元组
im.load():映像分配存储并从文件加载它
im.point(table):返回图像的副本,其中每个像素已通过给定的查找表进行映射
im.resize(size,filter=None):返回图像的已调整大小的副本
im.rotate(angle):返回围绕其中心逆时针旋转给定度数的图像副本
im.save(outfile,format,options):将图像保存在给定的文件名下
im.seek(frame):寻找序列文件中的给定帧
im.show():显示图像
im.split():返回图像中各个图像带的元组
im.tell():返回当前帧编号
im.thumbnail(size):修改图像以包含其自身的缩略图版本
im.paste(image,box):将另一张图像粘贴到此图像中
im.transpose(method):返回图像的翻转或旋转副本
-
im.verify():尝试确定文件是否损坏,而不实际解码图像数据
对象的属性:
- im.format:源文件的文件格式
- im.mode:图像模式典型值为“1”,“L”,“RGB”或“CMYK”
- im.size:图像大小,以像素为单位。大小以2元组(宽度,高度)给出
- im.palette:调色板表
- im.info:保存与图像相关的数据的字典
2)ImageChops模块
ImageChops模块包含多个算术图像的操作,称为通道操作,它们可以实现,特殊效果,图像合成,算法绘画等
它的功能大多数通道操作都是采用一个或两个图像参数比较来返回一个新图像,下面只列出一些常用的方法:
IC.lighter(image1,image2):逐个像素地比较两个图像,并返回包含较亮值的新图像
from PIL import Image
from PIL import ImageChops
im1=Image.open('1.jpg')
im2=Image.open('2.jpg')
IC_image=ImageChops.lighter(im1,im2)
IC_image.show()
- IC.darker(image1,image2):逐个像素地比较两个图像,并返回包含较暗值的新图像
- IC.difference(image1,image2):返回两个图像之间差异的绝对值
- IC.multiply(image1,image2):将两个图像叠加在一起。如果将图像与纯黑色图像相乘,则结果为黑色。如果乘以纯白图像,则图像不受影响
- IC.screen(image1,image2):将两个倒置的图像叠加在一起
- IC.add(image1,image2,scle,offset):添加两个图像,按比例划分结果并添加偏移量
- IC.subtract(image1,image2,scale,offset):减去两个图像,按比例划分结果并添加偏移量
3)ImageColor模块
ImageColor模块用来实现RGB颜色表转换,它支持是颜色格式包括:
- 十六进制颜色说明符,例如,“#ff0000”指定纯红色
- RGB函数,以“rgb(红色,绿色,蓝色)”给出,其中颜色值是0到255范围内的整数,如,“rgb(255,0,0)”和“rgb(100%,0%,0%)
- 常见的HTML颜色名称,例如,“red”指定纯红色
getrgb(color):将颜色字符串转换为RGB元组
getcolor(color,mode):与getrgb相同,但如果模式不是颜色或调色板图像,则将RGB值转换为灰度值