@TOC
图片的保存主要有两种方法,分别是Image模块中的save方法和convert()方法,下面分别对他们进行介绍:
Image模块中的save()方法用于保存图片,保存图片时,名称变的很重要,如果指定了图片格式,则会以指定的格式存储图片,如果不指定格式,它会以默认的图片格式来存储。 语法格式如下: Image.save(fp,format=None,**params)
参数: fp:图片存储路径(filepath)的缩写,字符串格式 format:可选参数,指定图片的格式 **params:其他可选参数,如quality参数可以控制图片质量等等 示例:
from PIL import Image #导入Image图像处理模块
#创建一个Image对象
image = Image.open('1.jpeg')
#保存图片,指定格式为png
image.save('1.png', 'png')
#如果format参数和前面不一致,以前面为主,下面就保存为1.jpg
image.save('1.jpg', 'png')
convert() 方法用于将图片转换为不同的模式,最后再用save保存 语法如下: convert(mode,**params)
参数: mode:要转换的图像模式 **params:其他可选参数 ,例如matrix转换矩阵等等 示例如下:
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('1.jpeg')
# convert()方法将图像转换为RGB模式
image.convert('RGB')
# 保存图像
image.save('1_rgb.jpeg')
在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。
resize()可以实现图片的缩放效果,它返回一个新的Image对象,该对象具有指定的尺寸。原始图像不会被修改。 语法如下: resize(size,resample=NEAREST,box=None)
参数解释: size:二元组(width,height),指定新的图片的宽度和高度 resample:可选参数,用于指定在调整图像大小时使用的重采样滤波器 box:可选参数,指定要调整的图像的原始区域,是一个四元组(left,upper,right,lower),未指定则默认缩放整个图像 示例如下:
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image2 = Image.open('1.jpg')
print(f"原始图像大小: {image2.size}")
# 调整图片为600x600,并裁剪为100x100-400x300的区域
image2 = image2.resize((600, 600),box=(100,100,400,300))
# 显示图片
image2.show()
print(f"调整后图像大小: {image2.size}")
输出:
原始图像大小: (474, 325) 调整后图像大小: (600, 600)
图像由许多像素点组成,像素是组成图像的基本单位,而每一个像素点又可以使用不同的颜色,图像的分离与合并指的就是图像颜色的分离与合并
split() 方法用于将图像分离成其各个颜色通道。适用于处理多通道图像,比如RGB图像(红、绿、蓝三个通道)或RGBA图像(红、绿、蓝、透明度四个通道)。 示例如下:
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('images/bg.jpg')
# 分离颜色通道
r, g, b = image.split()
# 分别保存三个通道的图片
r.save('images/red.png')
g.save('images/green.png')
b.save('images/blue.png')
# 分别显示三个通道的图片
r.show('images/red.png')
g.show('images/green.png')
b.show('images/blue.png')
输出:
原图为:
Image 类提供的 merge() 方法可以实现图像的合并操作。注意,图像合并,可以是单个图像合并,也可以合并两个以上的图像。该函数也是返回一个Image对象 语法格式如下: Image.merge(mode,bands)
参数: mode:指定输出图片的模式 bands:参数类型为元组或者列表,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b) 示例:
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('images/bg.jpg')
# 分离颜色通道
r, g, b = image.split()
# 合并三个通道的图片,注意通道顺序不同,图片颜色不同,比如下面是grb,如果是rgb就会合成原图颜色
merged = Image.merge('RGB', (g, r, b))
# 显示合并后的图片
merged.show()
另外和并图片需要两张图片的模式和图像大小一样,否则不能合并。因此,对于那些模式、大小不同的图片要进行预处理。
输出:
Image 类也提供了 blend() 方法来实现图片的叠加,语法如下: Image.blend(iamge1,image2,aipha)
参数解释: image1,image2:表示两个 Image 对象。 alpha:表示透明度,取值范围为 0 到 1,当取值为 0 时,输出图像相当于 image1 的拷贝,而取值为 1 时,则是 image2 的拷贝,只有当取值为 0.5 时,才为两个图像的中合。因此改值的大小决定了两个图像的混合程度。 示例:
from PIL import Image # 导入Image图像处理模块
# 实例化两个Image对象,resize()调整图片大小一致
im1 = Image.open('./images/bg.jpg').resize((500, 500))
im2 = Image.open('./images/1.jpg').resize((500, 500))
# 叠加图片
result = Image.blend(im1, im2, 0.5)
# 显示叠加后的图片
result.show()
输出:
图像的剪裁、复制、粘贴是图像处理过程中经常使用的基本操作,Pillow Image 类提供了简单、易用的 API 接口,能够帮助您快速实现这些简单的图像处理操作。
Image 类提供的 crop() 函数允许我们以矩形区域的方式对原图像进行裁剪,crop() 方法会返回一个 Image 对象语法格式如下: crop(box=None)
box:表示裁剪区域,指定要裁剪的图像的原始区域,是一个四元组(x1,y1,x2,y2),表示图像的起始左上角和结束右下角的坐标,默认为 None,表示拷贝原图像 示例:
from PIL import Image # 导入Image图像处理模块
# 实例化一个Image对象
im = Image.open('./images/bg.jpg')
# 裁剪图片
cropped = im.crop((100, 100, 600, 400))
# 显示裁剪后的图片
cropped.show()
输出:
图像的几何变换主要包括图像翻转、图像旋转和图像变换操作,Image 类提供了处理这些操作的函数 transpose()、rotate() 和 transform(),下面分别对它们进行讲解。
该函数可以实现图像的垂直、水平翻转,语法格式如下: Image.transpose(method)
method 参数决定了图片要如何翻转,参数值如下:
输出:
rotate()方法可以把图像旋转任意角度,语法格式如下: Image.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None)
参数解释: 其中第一个为必选参数,其余为可选 angle:旋转的角度 resample:重采样滤波器 expand:布尔值,用于确定是否扩展输出图像以容纳整个旋转后的图像 center:旋转中心 translate:旋转后的平移量 fillcolor:填充颜色 示例
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象(宽高为500x500,背景色为米色)
im5 = Image.new('RGBA', (500, 500), "beige")
# 旋转45度
im_ratate = im5.rotate(45)
# 显示图像
im_ratate.show()
输出:
该函数能够对图像进行变换操作,通过指定的变换方式,产生一张规定大小的新图像,语法格式如下: Image.transform(size, method, data=None, resample=0)
参数解释: size:指定新图片的大小; method:指定图片的变化方式, data:该参数用来给变换方式提供所需数据; resample:图像重采样滤波器 示例:
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象(宽高为500x500,背景色为米色)
im5 = Image.new('RGBA', (500, 500), "beige")
# 设置图像尺寸为300x300,图片的变换方式为EXTENT,变换后的图片的位置为(0,0)到(500,500)
im6 = im5.transform((300, 300), Image.EXTENT, (0, 0, 500, 500))
# 显示图像
im6.show()
输出:
好运都藏在努力里!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。