Image类方法
首先需要创建Image类的对象,进而调用Image类中方法。创建实例可以采用Image模块中的函数(open、new、blend等),该篇为简单起见,通过
img = Image.open('***.jpg')来创建,此时,img为一个Image对象。
1.convert
img.convert(mode=None, matrix=None, dither=None, palette=WEB, colors=256)
- mode 请求的模式,即将图像img转换成一张模式为mode的新图像
- matrix 可选的转换矩阵,如果给定,则该值应为包含浮点值的4或12元组。
- dither 从模式
RGB转换为P或从RGB或L转换为1时使用,可用的方法为NONE或FLOYDSTEINBERG(默认)。请注意,提供矩阵时不使用此功能。 - palette 从模式
RGB转换为P时要使用的调色板。可用的调色板是WEB或ADAPTIVE。 - colors 用于“自适应”调色板的颜色数。默认值为256。
- returns 一个Image对象
因此可以将Convert()函数传参归纳为以下三种方式:
img.convert(mode)
说明:该种方式最为常见且最易理解,即图像几种模式之间的相互转换。
示例1:
#导入模块Image
from PIL import Image
#打开图像image
im = Image.open('image.jpg')
#将图像image转化为模式为1的图像imc
imc = im.convert('1')
#显示
im.show()
imc.show()
运行结果:
示例2:
#导入模块Image
from PIL import Image
#打开图像im1
im = Image.open('im1.png')
#将图像im1转化为模式为L的图像imc
imc = im.convert('L')
#显示
im.show()
imc.show()
运行结果:
img.convert("P",palette = "WEB"\"ADAPTIVE")
实例:
#导入模块Image
from PIL import Image
#打开图像img
im = Image.open('img.jpg')
#将mode为RGB图像image转化为模式为P的图像imc时,用调色板进行调色
imc = im.convert('P',palette='WEB')
#显示
im.show()
imc.show()
运行结果:

img.convert(mode, matrix)
说明:matrix应为一个包含浮点值的4或12元组。
实例: 将RGB图像(使用D65光源根据ITU-R 709线性校准)转换为CIE XYZ颜色空间:
#导入模块Image
from PIL import Image
#打开图像img
im = Image.open('img.jpg')
rgb2xyz = (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0)
#将RGB图像(使用D65光源根据ITU-R 709线性校准)转换为CIE XYZ颜色空间:
imc = im.convert("RGB", rgb2xyz)
#显示
im.show()
imc.show()
运行结果:
2.copy
img.copy()
功能:复制img图像,返回图像img副本。
3.crop
img.crop(box = None )
- box 一个四元组,定义了左,上,右和下像素坐标。
- returns 一个Image对象
功能: 裁剪box所表示区域的图像
实例:
#导入模块Image
from PIL import Image
#打开图像im2
im = Image.open('im2.png')
#裁剪图像,返回(100,50,700,400)所表示区域的图像
im_new = im.crop((100,50,700,400))
#展示
im.show()
im_new.show()
运行结果:
4.paste
img.paste(im, box=None, mask=None)
- im 既可以是图像,也可以是像素值(整数或元组)
- box 4元组,提供要粘贴的区域。如果为2元组,则以该2元组为左上角开始粘贴。如果省略,则将图像粘贴到左上角(0,0)。
- mask 可选的蒙版图像。
实例1:
from PIL import Image
#打开源图像img
img = Image.open('image.jpg')
img.show()
#打开要被粘贴的图像img_1
img_1 = Image.open('pig2.png')
img_1.show()
#将图像img_1粘贴到源图像img上
img.paste(img_1)
#显示
img.show()
运行结果:
实例2:
#导入Image模块
from PIL import Image
#打开源图像img
img = Image.open('image.jpg')
img.show()
#打开要被粘贴的图像img_1
img_1 = Image.open('pig2.png')
img_1.show()
#将图像img_1粘贴到源图像img上,(100,100)为其粘贴的左上角
img.paste(img_1,(100,100))
#显示
img.show()
运行结果:
实例3:
#导入Image模块
from PIL import Image
#打开源图像img
img = Image.open('image.jpg')
img.show()
#将(100,100,500,500)该区域填充为红色
img.paste('red',(100,100,500,500))
#显示
img.show()
运行结果:
实例4:
#导入Image模块
from PIL import Image
#打开源图像im1
img = Image.open('im2.png')
img.show()
#打开要被粘贴图像pig2
img_1 = Image.open('pig2.png')
img_1.show()
#以im4图像为mask
m = Image.open('im4.png')
m.show()
#调整蒙版图像大小,使之与被粘贴图像尺寸大小一样
mask = m.resize(img_1.size)
#以mask为蒙版,将img_1粘贴到img上
img.paste(img_1,mask)
#显示
img.show()
运行结果:
说明:作为mask的图像,其大小一定要与被粘贴的图像大小一致。
5.draft
img.draft(mode,size )
- mode 请求的图像模式
- size 请求的图像大小
功能:配置图像文件加载器,使其返回与给定模式和大小尽可能匹配的图像版本。例如,可以在加载彩色JPEG时将其转换为灰度。
注意:大多数图像未实现此方法。当前仅对JPEG和MPO图像实现。
实例:
#导入模块Image
from PIL import Image
#打开图像im
img = Image.open('image.jpg')
#返回模式为L,大小为(100,100)的图像
img.draft('L',(100,100))
img.show()
运行功能:
6.filter
img.filter(filter)
- filter 过滤器
实例: 使用ImageFilter模块中的滤镜可以模糊输入图像
#导入模块
from PIL import Image, ImageFilter
#打开图像
im = Image.open("image.jpg")
im.show()
#使用给定的过滤器过滤该图像
im_blurred = im.filter(filter=ImageFilter.BLUR)
im_blurred.show()
运行结果:
7.getbands
img.getbands()
功能:返回一个元组,其中包含该图像中每个管道的名称。
实例:
#导入模块
from PIL import Image, ImageFilter
#打开图像
im = Image.open("image.jpg")
#调用getbands()
bands = im.getbands()
#输出
print(bands)
运行结果:('R', 'G', 'B')
8.getbbox
img.gettbox()
功能: 计算图像中非零区域的边界框。
返回值: 4元组,定义了左,上,右和下像素坐标,如果图像为空,则返回None。
实例:
#导入模块
from PIL import Image, ImageFilter
#打开图像
im = Image.open("image.jpg")
#调用getbbox()
box = im.getbbox()
#输出
print(box)
运行结果:(0, 0, 1440, 900)
9.getcolors
img.getcolors(maxcolors=256):
- maxcolors 最大颜色数。如果超过此数字,则此方法返回None。默认限制为256
功能:返回此图像中使用的颜色列表。
实例:
#导入模块
from PIL import Image, ImageFilter
#打开图像
im = Image.open("tuya.png")
im.show()
#调用getcolors()
list_colors = im.getcolors()
#输出
print(list_colors)
运行结果:
[(47698, (255, 255, 255, 255)),...,(1, (255, 201, 219, 255)), (4, (255, 175, 201, 255))]
10.getpixel
img.getpixel(xy)
- xy 坐标,形式为(x,y)
功能:返回给定位置的像素值。
11.putpixel
img.putpixel(xy,value)
- xy 像素坐标,形式为(x,y)
- value 像素值,对于单通道,为一个数值,如果为多通道,则为元组
功能:改变某像素的值。
12.resize
img.resize(size,resample = 3,box = None,reduction_gap = None)
- size 请求的大小(以像素为单位),格式为2元组:(宽度,高度)。
功能:改变图像的尺寸,既可以放大也可以缩小。
13.thumbnail
img.thumbnail(size,resample = 3,reduction_gap = 2.0)
- size 请求的大小(以像素为单位),格式为2元组:(宽度,高度)。
功能:将此图像制作为缩略图。
14.transpose
img.transpose(method)
- method 图像转化的方法,详情见下表:
| method | 实现功能 |
|---|---|
| FLIP_LEFT_RIGHT | 水平翻转图像(从左到右),输出image沿宽度方向翻转的内容 |
| FLIP_TOP_BOTTOM | 垂直翻转图像(从上到下),输出image沿高度方向翻转的内容 |
| ROTATE_90 | 逆时针旋转图像90° |
| ROTATE_180 | 逆时针旋转图像180° |
| ROTATE_270 | 逆时针旋转图像270° |
| TRANSPOSE | 水平翻转图像(从左到右),逆时针旋转图像90° |
| TRANSVERSE | 水平翻转图像(从左到右),逆时针旋转图像270° |
实例1: FLIP_LEFT_RIGHT
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 水平翻转图像(从左到右)
img.transpose(Image.FLIP_LEFT_RIGHT).show()
运行结果:
实例2: FLIP_TOP_BOTTOM
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 竖直翻转图像(从上到下)
img.transpose(Image.FLIP_TOP_BOTTOM).show()
运行结果:
实例3: ROTATE_90
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 逆时针旋转90°
img.transpose(Image.ROTATE_90).show()
运行结果:
实例6: TRANSPOSE
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 先左右翻转然后逆时针旋转90°
img.transpose(Image.TRANSPOSE).show()
运行结果:
实例7: TRANSVERSE
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 先翻转然后逆时针旋转270°
img.transpose(Image.TRANSVERSE).show()
运行结果:
15.rotate
img.rotate(angle,resample=0, expand=0, center=None, translate=None, fillcolor=None)
- angel 图像旋转的角度
功能:将图像内容以逆时针为正方向,旋转angel角度
说明:图像尺寸并没有旋转!
实例: 逆时针旋转90°
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
img.show()
# 逆时针旋转
img.rotate(90).show()
运行结果:
16.spilt
img.split()
- 返回值 一个包含通道的元组
功能:将此图像分成单独的通道(每个通道皆是Image对象)
实例:
#导入Image模块
from PIL import Image
#打开图像
img = Image.open('image.jpg')
#分离通道
bands = img.split()
print(bands)
运行结果:(<PIL.Image.Image image mode=L size=1440x900 at 0x1D76F01B700>, <PIL.Image.Image image mode=L size=1440x900 at 0x1D77FEB3850>, <PIL.Image.Image image mode=L size=1440x900 at 0x1D77FEB3730>)
17.save
img.save(fp,format = None,** params)
- fp 保存图像的文件名
功能:将图像保存到本地。
来源:CSDN
作者:忆且จุ๊บ
链接:https://blog.csdn.net/weixin_44191535/article/details/104262095