from PIL import Image
使用 Image 类可以实例化一个 Image 对象,通过调用该对象的一系列属性和方法对图像进行处理。Pilow 提供了两种创建 Image 实例对象的方法,下面对它们进行简单的介绍。
open()
使用 Image 类的 open() 方法,可以创建一个 Image 对象,语法格式如下:
im = Image.open(fp,mode="r")
参数说明:
- fp:即 filepath 的缩写,表示文件路径,字符串格式;
- mode:可选参数,若出现该参数,则必须设置为 “r”,否则会引发 ValueError 异常。
示例如下:
from PIL import Image
#打开一图片文件
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#要显示图像需要调用 show()方法
im.show()
图像显示结果如下:
图1:显示结果
new()
使用 Image 类提供的 new() 方法可以创建一个新的 Image 对象,语法格式如下:
im=Image.new(mode,size,color)
参数说明如下:
- 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()
输出图像如下所示:
图2:显示结果
Pillow Image对象属性
Image 对象有一些常用的基本属性,这些属性能够帮助我们了解图片的基本信息,下面对这些属性做简单的讲解:
1) size:查看图像的尺寸
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#打印image对象
print(im)
#查看尺寸
print("宽是%s高是%s"%(im.width,im.height))
#或者通过size查看
print("图像的大小size:",im.size)
输出结果:
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=455x191 at 0x381C750>
宽是455高是191
图像的大小size: (455, 191)
2) format:查看图片的格式
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
print("图像的格式:",im.format)
输出结果:
图像的格式: PNG
3) readonly:图片是否为只读
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
print("图像是否为只读:",im.readonly)
该属性的返回为 0 或者 1,分别对应着是和否,输出结果如下:
图像是否为只读: 1
4) info:查看图片相关信息
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
# 包括了每英寸像素点大小和截图软件信息
print("图像信息:",im.info)
该属性的返回值为字典格式,输出结果如下:
图像信息: {'dpi': (96, 96), 'Software': 'Snipaste'}
5) mode:图像模式
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
print("图像模式信息:",im.mode)
输出结果:
图像的模式: RGBA
上述涉及了许多图片模式的名称,比如 RGB、RGBA 等,下面对常用的图片模式做简单的总结,如下表所示:
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 位浮点像素,单色通道。 |
Pillow图片格式转换
Pillow 库支持多种图片格式,您可以直接使用 open() 方法来读取图片,并且无须考虑图片是何种类型。同时,Pillow 能够很轻松地实现图片格式之间的转换。
图片格式之间的转换主要有以下两种方法,下面分别对它们进行了介绍:
save()
顾名思义,save() 方法用于保存图像,当不指定文件格式时,它会以默认的图片格式来存储;如果指定图片格式,则会以指定的格式存储图片。save() 的语法格式如下:
Image.save(fp, format=None)
参数说明如下:
- fp:图片的存储路径,包含图片的名称,字符串格式;
- format:可选参数,可以指定图片的格式。
示例如下:
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
im.save('C:/Users/Administrator/Desktop/c.biancheng.net.bmp')
此时您的计算机桌面上会存在一个 c.bianchneg.net.BMP格式的图片。
convert()+save()
注意,并非所有的图片格式都可以用 save() 方法转换完成,比如将 PNG 格式的图片保存为 JPG 格式,如果直接使用 save() 方法就会出现以下错误:
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png