软件功能
1. 概述
Python 成像库为您的Python 解释器添加了图像处理功能。
该库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。
核心图像库旨在快速访问以几种基本像素格式存储的数据。它应该为通用图像处理工具提供坚实的基础。
让我们看看这个库的一些可能的用途。
2. 图片文件
Python 成像库非常适合图像归档和批处理应用程序。您可以使用此库创建缩略图、在文件格式之间进行转换、打印图像等等。
当前版本可以识别并读取大量格式。写入支持有意限于最常用的交换和表示格式。
3、图像显示
当前版本包括TkPhotoImage 和BitmapImage 接口,以及与PythonWin 和其他基于Windows 的工具包一起使用的Tk 和BitmapImage 接口。许多其他GUI 工具箱提供某种PIL 支持。 Windows DIB 接口
为了进行调试,还有show() 方法将图像保存到磁盘并调用外部显示实用程序。
4. 图像处理
该库包含基本的图像处理功能,包括点运算、使用一组内置卷积核进行过滤以及色彩空间转换。
该库还支持图像调整大小、旋转和任意仿射变换。
有一种直方图方法可以让您从图像中提取一些统计信息。这可用于自动对比度增强和全局统计分析。
软件特色
1. 增强功能
对于更高级的图像增强,您可以使用ImageEnhance 模块中的类。从图像创建后,您可以使用增强对象快速尝试不同的设置。
通过这种方式,您可以调整对比度、亮度、色彩平衡和清晰度。
2. 图像序列
Python 图像库包含对图像序列(也称为动画格式)的一些基本支持。支持的序列格式包括FLI/FLC、GIF 和一些实验格式。 TIFF 文件还可以包含多个帧。
3.PostScript打印
Python 成像库包含在PostScript 打印机上打印图像、文本和图形的函数
4. 控制解码器
某些编解码器允许您在从文件读取图像时对其进行操作。这通常可用于在创建缩略图(速度通常比质量更重要)和打印到单色激光打印机(仅需要图像的灰度版本)时加快解码速度。
5. Python Imaging Library处理光栅图像;即像素数据的矩形。
一幅图像可以包含一个或多个数据带。 Python 成像库允许您在单个图像中存储多个波段,只要它们都具有相同的大小和深度。例如,PNG 图像的红色、绿色、蓝色和Alpha 透明度值可能具有“R”、“G”、“B”和“A”色带。许多操作分别对每个波段进行操作,例如直方图。将每个像素视为每个波段具有一个值通常很有用。
官方教程
教程
使用图像类
Python 图像库中最重要的类是模块中定义的同名Image 类。您可以通过多种方式创建此类的实例。处理其他图像或通过从文件加载图像从头开始创建图像。
要从文件加载图像,请使用Image 模块中的open() 函数:
如果成功,该函数返回一个Image 对象。现在您可以使用实例属性来检查文件内容:
格式属性标识图像的来源。如果没有从文件中读取图像,则设置为None。 size 属性是一个包含宽度和高度(以像素为单位)的二元组。 mode 属性定义图像中波段的数量和名称,以及像素类型和深度。常见的模式是针对灰度图像的“L”(亮度)、针对真彩色图像的“RGB”以及针对印前图像的“CMYK”。
如果无法打开文件,则会引发OSError 异常。
一旦有了Image 类的实例,就可以使用该类定义的方法来处理和操作图像。例如,让我们显示刚刚加载的图像:
笔记
标准版本的show() 效率不高,因为它将图像保存到临时文件并调用实用程序来显示图像。如果您没有安装适当的实用程序,它甚至无法工作。但当它确实工作时,它对于调试和测试来说非常方便。
以下部分概述了该库中提供的各种功能。
读取和写入图像
Python 图像库支持多种图像文件格式。要从磁盘读取文件,请使用Image 模块中的open() 函数。您不必知道文件格式即可打开该文件。库根据文件内容自动确定格式。
要保存文件,请使用Image 类的save() 方法。保存文件时,名称变得很重要。除非您指定格式,否则库将使用文件扩展名来发现要使用的文件存储格式。
将文件转换为JPEG
save() 方法可以提供第二个参数,该参数明确指定文件格式。如果您使用非标准扩展名,则必须始终以这种方式指定格式:
创建JPEG 缩略图
值得注意的是,除非实际需要,否则该库不会解码或加载栅格数据。当您打开文件时,系统会读取文件头以确定文件格式并提取解码文件所需的模式、大小和其他属性,但文件的其余部分将在稍后处理。
这意味着无论文件大小和压缩类型如何,打开图像文件都是一个快速的操作。这是一个快速识别一组图像文件的简单脚本:
识别图像文件
剪切、粘贴和合并图像
该Image 类包含可让您操作图像内区域的方法。要从图像中提取子矩形,请使用crop()方法。
从图像复制子矩形
该区域由带有坐标(左、上、右、下)的四元组定义。 Python 成像库使用左上角为(0, 0) 的坐标系。另请注意,坐标指的是像素之间的位置,因此上例中的区域正好是300x300 像素。
现在您可以以某种方式处理该区域并将其粘贴回来。
处理子矩形并将其粘贴回来
粘贴区域时,区域的大小必须与给定区域完全匹配。此外,该区域不能超出图像范围。然而,原始图像的图案和区域不需要匹配。如果没有,粘贴前会自动转换区域
这是另一个例子:
滚动图像
对于更高级的技术,粘贴方法还可以将透明度蒙版作为可选参数。在此蒙版中,值255 表示粘贴的图像在该位置不透明(即,粘贴的图像应按原样使用)。值为0 表示粘贴的图像完全透明。之间的值代表不同程度的透明度。例如,粘贴RGBA 图像并将其用作蒙版将粘贴图像的不透明部分,但不会粘贴其透明背景。
Python 成像库还允许您处理多波段图像的各个波段(例如RGB 图像)。 split 方法创建一组新图像,每个图像包含原始多波段图像中的一个波段。合并功能采用一个图案和一组图像,并将它们组合成一个新图像。以下示例交换RGB 图像的三个波段:
分割和合并频段
请注意,对于单波段图像, split() 返回图像本身。要使用单独的色带,您可能需要首先将图像转换为“RGB”。
几何变换
此PIL.Image.Image 类包含图像调整大小()和旋转()方法。前者采用给出新大小的元组,后者采用逆时针角度。
简单的几何变换
要将图像以90 度为单位旋转,可以使用rotate() 方法或transpose() 方法。后者还可用于围绕水平或垂直轴翻转图像。
转置图像
如果扩展标志为true,则转置(ROTATE)旋转()操作也可以与转置(ROTATE)旋转()操作相同地执行,以对图像大小提供相同的更改。
可以通过transform()方法执行更通用的图像变换形式。
颜色转换
Python 成像库允许您使用Convert() 方法在不同像素表示形式之间转换图像。
模式之间转换
该库支持每种支持的模式与“L”和“RGB”模式之间的转换。要在其他模式之间进行转换,您可能必须使用中间图像(通常是“RGB”图像)。
图像增强
Python 成像库提供了许多可用于增强图像的方法和模块。
筛选
ImageFilter 模块包含许多预定义的增强型过滤器,可以与filter() 方法一起使用。
应用过滤器
点击操作
point() 方法可用于转换图像的像素值(例如,图像对比度操作)。在大多数情况下,您可以将带有一个参数的函数对象传递给此方法。每个像素都根据这个函数进行处理:
应用点变换
使用上述技术,您可以快速将任何简单的表达式应用于图像。您还可以结合使用point()和paste()方法来有选择地修改图像
更新日志
8.2.0 弃用与类别im.category 一起使用,该类别将在Pillow 10.0.0(2023 年1 月2 日)中删除,以及相关的Image.NORMAL、Image.SEQUENCE 和Image.CONTAINER 属性。
可以用判断图像是否有多个帧来代替。 getattr(im, 'is_animated', False)
Tk / Tcl 8.4不再支持Tk/Tcl 8.4,并将在Pillow 10.0.0 (2023-01-02) 中删除它,并最低支持Tk/Tcl 8.5。
API变更
Image.alpha_composite:目标当调用alpha_composite() 时,dest 参数现在接受负坐标。例如,框参数paste()的左上角可以为负数。当然,这会产生裁剪覆盖图像的效果。
Image.getexif:EXIF和GPS IFD此前,getexif() 将EXIF IFD 展平为剩余数据,从而丢失信息。目前,此信息仍然是独立的,并移至im.getexif().get_ifd(0x8769) 下。
您可以通过im.getexif()[0x8825]直接访问GPS IFD字典。现在这与其他IFD 一致,并且必须通过im.getexif().get_ifd(0x8825) 访问。
这些更改仅影响Pillow 6.0 中引入的getexif()。旧的_getexif() 方法不受影响。
图片。_MODEINFO自PIL 以来,此内部字典已被注释为已弃用,现已被删除。相反,可以使用Image.getmodebase()、Image.getmodetype()、Image.getmodebandnames()、Image.getmodebands() 或ImageMode.getmode()。
API附加JPEG图像的getxmp()添加了返回JPEG 图像的XMP 数据的新方法。它将XML 数据读入名称和值的字典中。
例如:
ImageDraw.rounded_rectangle
添加了rounded_rectangle()。矩形()的工作原理与矩形()相同,除了一个额外的半径参数。半径限制为宽度或高度的一半,以便用户可以创建圆形,但不能创建任何其他椭圆形。
ImageOps.autocontrast:preserve_toneautocontrast() 的默认行为是为每个颜色通道标准化一个单独的直方图,从而改变图像的色调。新的preserve_tone参数通过使用所有通道的亮度直方图来保留色调。
ImageShow.GmDisplayViewer如果GraphicsMagick存在,PIL.ImageShow.Viewer将注册这个新的子类。它使用GraphicsMagick 工具(ImageMagick 的一个分支)来显示图像。
基于GraphicsMagick 的查看器的优先级低于ImageMagick 的查看器。因此,如果同时安装了ImageMagick 和GraphicsMagick,im.show() 和ImageShow.show() 更喜欢基于ImageMagick 的查看器,即对于安装了ImageMagick 的Pillow 用户来说,它们的行为保持不变。
ImageShow.IPythonViewer如果IPython 存在,PIL.ImageShow.Viewer 将注册这个新子类。它在所有IPython 前端上显示图像。这对于允许im.show() 显示图像的Google Colab 用户很有帮助。
它的优先级低于其他默认的PIL.ImageShow.Viewer 实例,因此仅当没有其他查看器可用时才使用im.show() 或ImageShow.show() 没有其他查看器可用。这意味着大多数Pillow 用户的PIL.ImageShow 行为将保持不变。
使用ICC配置文件保存TIFFJPEG、PNG 和WebP 已经可用,并且现在可以通过关键字参数指定TIFF 文件的ICC 配置文件:
安全这些是通过OSS-Fuzz 找到的。
CVE-2021-25287,CVE-2021-25288:修复了在Jpeg2KDecode中读取的OOB对于具有多个波段的J2k 图像,每个波段具有不同的宽度是合法的,例如L 为1 字节,A 为4 字节。
这可以追溯到Pillow 2.4.0。
CVE-2021-28675:修复PsdImagePlugin中的DOSPsdImagePlugin.PsdImageFile 不会明智地检查有关数据块大小的输入层编号,这可能会导致在open() load() 之前拒绝服务。
这又回到了PIL 分支。
CVE-2021-28676:修复FLI DOSFliDecode.c 无法正确检查块前进是否非零,可能导致加载时出现无限循环。
这又回到了PIL 分支。
EPS 中使用的CVE-2021-28677:修复_open上的EPS DOSreadline 必须将\r 和\n 的任意组合处理为行结尾。当查找行尾时,它意外地使用了累积行的二次方法。
在接受要打开的图像之前的打开阶段,恶意EPS 文件可能会使用此文件在Pillow 上执行拒绝服务操作。
这又回到了PIL 分支。
CVE-2021-28678:修复BLP DOSBlpImagePlugin 在跳转到文件偏移后返回的数据后无法正确检查读取。这可能会导致拒绝服务,解码器可能会针对空数据多次运行。
这可以追溯到Pillow 5.1.0。
修复ImageFont中的内存DOSTTF 字体的损坏或特制字体规格可能会导致在字体中呈现文本时出现不合理的大字体大小。 ImageFont.py 在为其分配内存之前不会检查图像大小。
这又回到了PIL 分支。
其他变化GIF 编写器使用LZW 编码
GIF 文件现在使用LZW 编码编写,该编码生成的文件更小,通常约为旧编码器生成的文件大小的70% 左右。
像素数据使用CompuServe GIF 标准中指定的格式进行编码。
较旧的编码器使用游程长度编码的变体,该变体兼容但效率较低。
图形Magick测试套件现在可以在安装了GraphicsMagick 但未安装ImageMagick 的系统上运行。如果两者都安装,测试将优先选择ImageMagick。
Libraqm和FriBiDi链接复杂文本脚本的libraqm 依赖项的链接方式已更改:
源构建现在默认在构建时而不是运行时链接到libraqm 的系统版本。
二进制轮现在包含静态链接的libraqm 修改版本,它在运行时链接到FriBiDi。此更改旨在解决某些平台上以前的实施问题。这些是通过使用新的构建标志构建Pillow 来创建的。 --供应商-raqm --供应商-fribidi
OK,本文到此结束,希望对大家有所帮助。
-
DNF手游:平民买导师套还是等夏日套? 2025-01-04
-
【DNF】手游:突破300限制、四大摸金方法、狂赚泰拉、 2025-01-04
-
做超声检查时,医生为什么要在患者肚子上涂粘粘的东西 2025-01-04
-
妄想山海怎么加好友 加好友方法大全 2025-01-04
-
绯红之境兑换码最新2021 礼包兑换码大全 2025-01-04
-
小米mix fold有前置摄像头吗 2025-01-04
用户评论
终于找到最新的Pillow啊!之前用的版本太老了。
有12位网友表示赞同!
这个版本支持哪些新的图像格式呢?
有5位网友表示赞同!
要怎么才能确保下载到的是正式版而不是其他版本的?
有9位网友表示赞同!
我用pillow一直在做一些图片处理,希望能继续使用最新的功能。
有15位网友表示赞同!
v2.65.4 有没有修复之前版本的一些bug?
有12位网友表示赞同!
这个版本还有哪些改进呢?可以分享一下吗?
有19位网友表示赞同!
下载链接在哪儿啊?找不到啊。
有16位网友表示赞同!
Pillow真的太好用了,各种图像处理都能搞定。
有13位网友表示赞同!
之前用过别的图片处理库,pillow还是比较容易上手的。
有9位网友表示赞同!
希望能学习一些使用Pillow的教程,看下有哪些高级用法。
有12位网友表示赞同!
我想试试在代码中使用Pillow去编辑图像,感觉应该很酷!
有12位网友表示赞同!
最近项目需要用到图片压缩功能,不知道pillow支持吗?
有10位网友表示赞同!
希望这个版本能带来更加高效的图像处理速度,我的电脑有时候还是挺慢的。
有15位网友表示赞同!
我之前在使用Pillow的时候遇到过一些问题,希望能在这个版本中得到解决!
有9位网友表示赞同!
这个版本升级频率可真高啊,开发团队一直在迭代更新呢。
有11位网友表示赞同!
我已经安装了pillow,现在可以开始进行图像处理实验啦!
有5位网友表示赞同!
使用Pillow可以实现哪些创意图像编辑效果呢?有人分享一下吗?
有13位网友表示赞同!
学习Python 期间就发现Pillow非常实用,真的不错的一个库。
有17位网友表示赞同!
这个版本下载的大小怎么样?我的硬盘空间有点紧张。
有14位网友表示赞同!