Python利用Pillow处理图像的实践指南
作者:小小张说故事 发布时间:2023-05-07 09:15:30
一、引言
Pillow,是Python Imaging Library (PIL)的一个分支,用于处理图像。它是Python编程语言中最常用的图像处理库,提供广泛的图像处理功能,包括显示、操作和保存图片等。Pillow库的目标是使得图片处理在Python中更加容易进行。
二、安装和基本使用
首先,我们需要在Python环境中安装Pillow库。在命令行中输入以下指令即可:
pip install pillow
安装完成后,我们可以开始使用Pillow来处理图像。首先,我们需要导入Image模块,然后使用Image.open()方法打开一个图像文件。这个方法会返回一个Image对象,我们可以对这个对象进行操作,比如显示图像。
from PIL import Image
# 打开图像
img = Image.open('example.jpg')
# 显示图像
img.show()
三、图像处理
Pillow库为我们提供了丰富的图像处理功能。以下我们将详细介绍其中的一部分。
1.裁剪图像
我们可以使用Image.crop()方法裁剪图像。这个方法需要一个四元素的元组参数,分别代表裁剪区域的左、上、右、下四个坐标。
# 裁剪
box = (100, 100, 400, 400)
region = img.crop(box)
region.show()
2.旋转图像
我们可以使用Image.rotate()方法旋转图像。这个方法需要一个角度参数。
# 旋转
img_rotated = img.rotate(45)
img_rotated.show()
3.调整图像大小
我们可以使用Image.resize()方法调整图像的大小。这个方法需要一个二元素的元组参数,分别代表新的宽度和高度。
# 调整大小
img_resized = img.resize((128, 128))
img_resized.show()
4.改变颜色
我们可以使用Image.convert()方法改变图像的颜色。这个方法需要一个颜色模式字符串参数。
# 改变颜色
img_gray = img.convert('L')
img_gray.show()
四、图像的保存和格式转换
在我们处理完图像后,可能需要将处理后的图像保存下来。Pillow库的Image对象提供了save()方法,我们可以用它来保存图像。这个方法需要一个文件路径参数,表示保存图像的路径和文件名。
# 保存图像
img.save('new_example.jpg')
此外,Pillow库还支持多种图像格式的转换,包括JPEG、PNG、BMP、GIF、PPM和TIFF等。我们可以在保存图像时,直接通过文件的扩展名指定图像的格式。例如,如果我们想将图像保存为PNG格式,只需要将文件名设置为以.png结尾的名字即可。
# 保存为PNG格式
img.save('new_example.png')
Pillow会自动根据文件扩展名决定图像的格式。如果你不指定文件扩展名,Pillow将默认保存为JPEG格式。
同时,如果我们需要在保存图像时设置一些特定的参数,例如JPEG的质量,我们可以将这些参数作为关键字参数传给save()方法。以下是一个示例:
# 以指定质量保存JPEG图像
img.save('new_example.jpg', quality=95)
需要注意的是,不同的图像格式支持的参数是不同的。有些参数可能只对特定的图像格式有效。你可以查看Pillow的官方文档,获取更多关于保存图像和格式转换的信息。
五、颜色空间与颜色转换
在图像处理中,颜色空间转换是一个常见的任务。Pillow库支持多种颜色空间,例如RGB、HSV等。我们可以使用Image.convert()方法将图像从一个颜色空间转换到另一个颜色空间。
# 转换颜色空间
img_hsv = img.convert('HSV')
img_hsv.show()
六、图像的合成与拼接
如果你有多张图像,想将它们合并成一张新的图像,Pillow库也可以帮助你完成。我们可以使用Image.blend()方法将两张大小相同的图像进行混合,或者使用Image.composite()方法将多张图像按照一定的规则合成。
另外,如果你想将多张图像拼接成一张新的图像,你可以使用Image.new()方法创建一个新的空白图像,然后使用Image.paste()方法将其他图像粘贴到空白图像上。
# 创建一个新的空白图像
new_img = Image.new('RGB', (500, 500))
# 将其他图像粘贴到新图像上
new_img.paste(img, (0, 0))
new_img.paste(img_resized, (200, 200))
new_img.show()
七、图像绘图和文字添加
Pillow还提供了一些简单的图形绘制功能,比如绘制线条、圆形、多边形等。我们可以通过ImageDraw模块来进行绘图。下面是一个简单的例子:
from PIL import ImageDraw
draw = ImageDraw.Draw(img)
draw.line((0, 0) + img.size, fill=128)
draw.line((0, img.size[1], img.size[0], 0), fill=128)
img.show()
此外,Pillow还允许我们向图像中添加文字。我们可以使用ImageDraw.text()方法来添加文字。需要注意的是,添加文字需要指定字体,这需要使用ImageFont模块。
from PIL import ImageDraw, ImageFont
# 创建一个字体对象
font = ImageFont.truetype('arial.ttf', 15)
draw = ImageDraw.Draw(img)
draw.text((10, 10), 'Hello, Pillow!', font=font, fill='white')
img.show()
八、结语
来源:https://juejin.cn/post/7237520441554927671


猜你喜欢
- 今天在群里,熊猫君提议整理一个帖子,一方面为初学者提供一个入门指南,另一方面也象借此和已经在从事这个行业进行一点交流。下面是我从事这个行当多
- 如下所示:import pandas as pd#如果需要的话,需将df中的date列转为datetimedf.date = pd.to_d
- 使用Access数据库生成申报数据与读入数据的实例方法:示例:Sub Mwrite()On Error GoTo thiserrDim rs
- 概念单元测试 UT测试,针对程序来进行正确检测测试工作,一个优秀强壮代码 需要有完美的 UT测试用例go test基本用法go test 测
- Windows版本下的python并没有内置串口通讯的pyserial的库,所以需要自己下载。参照了网上的教程,有许多用的pip的安装方式,
- 一、安装在 cmd 命令中输入: pip install pygame即可安装成功了二、第一个代码实例代码快里面有注释,想必大家都可以看懂的
- 本文实例讲述了Python实现字符串格式化输出的方法。分享给大家供大家参考,具体如下:python属于强类型的语言,如果像java一样操作字
- MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。MyISAM是My
- 本文是对《Python Qt GUI快速编程》的第10章的例子剪贴板用Python3+PyQt5进行改写,分别对文本,图片和html文本的复
- 用css属性选择器可以有选择性地对链接样式进行控制,如让所有的外部链接都加一个小图标来标识其是一外部链接。但用css有弊端: 1、只支持Fi
- 1.lambda表达式一般用法语法:lamda argument:expressionexample:add = lambda x, y:
- 本文实例讲述了Python实现查找系统盘中需要找的字符。分享给大家供大家参考。具体如下:'''Created on
- 昨天,一同事发过来的一道数据库题目,就是哪种经典的父子级 ID 在同一数据库表中设计类型。需要在原表中添加一个字段,同时,将该节点的父子级详
- 0. 学习目标我们已经知道算法是具有有限步骤的过程,其最终的目的是为了解决问题,而根据我们的经验,同一个问题的解决方法通常并非唯一。这就产生
- 分别针对ie和火狐分别作了对xml文档和xml字符串的解析,所有代码都注释掉了,想看哪部分功能,去掉注释就可以了。至于在ajax环境下解析x
- 前言SQL Server 是数据库软件中比较常见且实用的软件,它的集成度很高,且功能非常强大。很多类型的网站系统后台数据库都依赖于SQL S
- 题目:来自Madrid且订单数少于3的消费者 建表:set nocount on --当 SET NOCOUNT 为
- 在一个字符串中,如果某个序列具有特殊的含义,每个序列以反斜线符号 (“”)开头,称为转义字符。 MySQL 识别下列转义字符:0 一个 AS
- 前言pycharm是python的一个商业的集成开发工具,本人感觉做python开发还是很好用的,django是一个很流行的python w
- 前言本文主要给大家介绍关于python中__init__、__new__和__call__方法的相关内容,分享出来供大家参考学习,下面话不多