Pillow之Image模块(三)

烈酒焚心 提交于 2020-02-12 04:16:25


  首先需要创建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或从RGBL转换为1时使用,可用的方法为NONEFLOYDSTEINBERG(默认)。请注意,提供矩阵时不使用此功能。
  • palette         从模式RGB转换为P时要使用的调色板。可用的调色板是WEBADAPTIVE
  • 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.filterfilter
  • 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               保存图像的文件名

功能:将图像保存到本地。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!