Python pillow库学习笔记
PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评。
自 2011 年以来,由于 PIL 库更新缓慢,目前仅支持 Python 2.7 版本,这明显无法满足 Python3 版本的使用需求。于是一群 Python 社区的志愿者(主要贡献者:Alex Clark 和 Contributors)在 PIL 库的基础上开发了一个支持 Python3 版本的图像处理库,它就是 Pillow。
比赛的时候碰到图像隐写,在经历了三板斧(看文件16进制,Stegsolve,binwalk,zsteg)之后,如果出现一些奇怪的三元组或者是需要图像批量处理的时候就需要自己写脚本来处理了,因而还是要学习一下这个库的。
安装
anaconda里自带,但是我用的是python标准版,就直接pip install pillow即可
打开图像
from PIL import Image
#im = Image.open(fp,mode="r")
#fp:即 filepath 的缩写,表示文件路径,字符串格式;
#mode:可选参数,若出现该参数,则必须设置为 "r",否则会引发 ValueError 异常。
#例子:
img=Image.open('2.png',mode='r')
img.show()#显示图像
#im=Image.new(mode,size,color)#创建一个新的Image对象
'''
参数说明如下:
mode:图像模式,字符串参数,比如 RGB(真彩图像)、L(灰度图像)、CMYK(色彩图打印模式)等;
size:图像大小,元组参数(width, height)代表图像的像素大小;
color:图片颜色,默认值为 0 表示黑色,参数值支持(R,G,B)三元组数字格式、颜色的十六进制值以及颜色英文单词。
'''
#例子:
#使用颜色的十六进制格式
im_1=Image.new(mode='RGB',(260,100),color="#ff0000")
im_1.show()
Image对象的属性
img.width#图像的宽
img.height#图像的高
w,h=img.size#返回的是宽高的元组,可用两个变量接收
img.format#图像的格式,png什么的
img.readonly#是否为只读图片
img.info#图片相关信息
img.mode#图像模式,RGB什么的
常用图像模式如下
mode | 描述 |
---|---|
1 | 1 位像素(取值范围 0-1),0表示黑,1 表示白,单色通道。 |
L | 8 位像素(取值范围 0 -255),灰度图,单色通道。 |
P | 8 位像素,使用调色板映射到任何其他模式,单色通道。 |
RGB | 3 x 8位像素,真彩色,三色通道,每个通道的取值范围 0-255。 |
RGBA | 4 x 8位像素,真彩色+透明通道,四色通道。 |
CMYK | 4 x 8位像素,四色通道,可以适应于打印图片。 |
YCbCr | 3 x 8位像素,彩色视频格式,三色通道。 |
LAB | 3 x 8位像素,L * a * b颜色空间,三色通道 |
HSV | 3 x 8位像素,色相,饱和度,值颜色空间,三色通道。 |
I | 32 位有符号整数像素,单色通道。 |
F | 32 位浮点像素,单色通道。 |
格式转换
#Image.save(fp, format=None)
'''save() 方法用于保存图像,当不指定文件格式时,它会以默认的图片格式来存储;如果指定图片格式,则会以指定的格式存储图片。
参数说明如下:
fp:图片的存储路径,包含图片的名称,字符串格式;
format:可选参数,可以指定图片的格式。
'''
#例子:
img.save('1.png')
#上述例子在保存为jpg格式时会出错,需要利用convert进行图像模式转换
'''
Image 类提供的 convert() 方法可以实现图像模式的转换。该函数提供了多个参数,比如 mode、matrix、dither 等,其中最关键的参数是 mode,其余参数无须关心。语法格式如下:
convert(mode,parms**)
mode:指的是要转换成的图像模式;
params:其他可选参数。
'''
#png保存为jpg的例子
img_temp=img.convert('RGB')
img_temp.save('1.jpg')
图像放缩
'''
在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。
resize() 函数的语法格式如下:
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)
参数说明:
size:元组参数 (width,height),图片缩放后的尺寸;
resample:可选参数,指图像重采样滤波器,与 thumbnail() 的 resample 参数类似,默认为 Image.BICUBIC;
box:对指定图片区域进行缩放,box 的参数值是长度为 4 的像素坐标元组,即 (左,上,右,下)。注意,被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;
reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有 3.0 和 5.0。
'''
#例子:
try:
#放大图片
img2=img.resize((500,600))#注意传入的是一个元组,因而有两个括号
img2.save('2.png')#保存图像
except IOError:
print('操作失败')
#对图片的一部分进行放大操作例子:
try:
#选择放大的局部位置,并选择图片重采样方式
# box四元组指的是像素坐标 (左,上,右,下)
#(0,0,120,180)