概念

Python 图像库处理栅格图像;也就是说,像素数据的矩形。

频带

图像可以包含一个或多个数据频带。Python 图像库允许您在单个图像中存储多个频带,前提是它们都具有相同的尺寸和深度。例如,PNG 图像可能具有“R”、“G”、“B”和“A”频带,分别代表红色、绿色、蓝色和 alpha 透明度值。许多操作分别对每个频带执行,例如直方图。通常将每个像素视为每个频带具有一个值很有用。

要获取图像中频带的数量和名称,请使用 getbands() 方法。

模式

图像的mode 是一个字符串,它定义了图像中像素的类型和深度。每个像素都使用比特深度的全部范围。因此,一个 1 位像素的范围是 0-1,一个 8 位像素的范围是 0-255,一个 32 位有符号整数像素的范围是 INT32,一个 32 位浮点数像素的范围是 FLOAT32。当前版本支持以下标准模式

  • 1 (1 位像素,黑白,以每字节一个像素存储)

  • L (8 位像素,灰度)

  • P (8 位像素,使用调色板映射到任何其他模式)

  • RGB (3x8 位像素,真彩色)

  • RGBA (4x8 位像素,带透明掩码的真彩色)

  • CMYK (4x8 位像素,色分离)

  • YCbCr (3x8 位像素,彩色视频格式)

    • 请注意,这是指 JPEG 标准,而不是 ITU-R BT.2020 标准

  • LAB (3x8 位像素,L*a*b 色彩空间)

  • HSV (3x8 位像素,色调、饱和度、亮度色彩空间)

    • 色调的范围 0-255 是 0 度 <= 色调 < 360 度的缩放版本

  • I (32 位有符号整数像素)

  • F (32 位浮点数像素)

Pillow 还提供对少数其他模式的有限支持,包括

  • LA (带 alpha 的 L)

  • PA (带 alpha 的 P)

  • RGBX (带填充的真彩色)

  • RGBa (带预乘 alpha 的真彩色)

  • La (带预乘 alpha 的 L)

  • I;16 (16 位无符号整数像素)

  • I;16L (16 位小端无符号整数像素)

  • I;16B (16 位大端无符号整数像素)

  • I;16N (16 位本机端无符号整数像素)

预乘 alpha 是指其他每个通道的值都乘以 alpha。例如,一个 RGBA 像素为 (10, 20, 30, 127) 将转换为一个 RGBa 像素为 (5, 10, 15, 127)。由于 alpha 通道中的半透明度,R、G 和 B 通道的值减半。

除了这些附加模式之外,Pillow 还没有支持每个通道深度超过 8 位的多通道图像。

Pillow 也不支持用户定义的模式;如果您需要处理上面未列出的频带组合,请使用 Image 对象序列。

您可以通过 mode 属性读取图像的模式。这是一个包含上述值之一的字符串。

尺寸

您可以通过 size 属性读取图像尺寸。这是一个 2 元组,包含以像素为单位的水平和垂直尺寸。

坐标系

Python 图像库使用笛卡尔像素坐标系,其中 (0,0) 位于左上角。请注意,坐标是指隐含的像素角;以 (0, 0) 为地址的像素的中心实际上位于 (0.5, 0.5)。

坐标通常以 2 元组 (x, y) 的形式传递给库。矩形以 4 元组 (x1, y1, x2, y2) 的形式表示,左上角位于最前面。

调色板

调色板模式 (P) 使用调色板来定义每个像素的实际颜色。

信息

您可以使用 info 属性将辅助信息附加到图像。这是一个字典对象。

在加载和保存图像文件时如何处理此类信息取决于文件格式处理程序(请参阅有关 图像文件格式 的章节)。大多数处理程序在加载图像时将属性添加到 info 属性,但在保存图像时会忽略它。

透明度

如果图像没有 alpha 频带,则可以在 info 属性中使用“transparency”键指定透明度。

大多数情况下,“transparency”值是一个单个整数,描述“1”、“L”、“I”或“P”模式图像中的哪个像素值是透明的。但是,PNG 图像可能具有三个值,一个用于“RGB”模式图像中的每个通道,或者可以具有“P”模式图像的字节字符串,以指定每个调色板条目的 alpha 值。

方向

JPG 和 TIFF 图像的 info 属性中,一个常见的元素是 EXIF 方向标签。它指示图像数据应该如何定向。例如,它可能指示图像旋转 90 度或镜像。要将此信息应用于图像,可以使用 exif_transpose()

过滤器

对于可能将多个输入像素映射到单个输出像素的几何操作,Python Imaging Library 提供了不同的重采样过滤器

Resampling.NEAREST

从输入图像中选择一个最近的像素。忽略所有其他输入像素。

Resampling.BOX

源图像的每个像素都以相同的权重贡献到目标图像的一个像素。对于上采样等效于 Resampling.NEAREST。此过滤器只能与 resize()thumbnail() 方法一起使用。

在版本 3.4.0 中添加。

Resampling.BILINEAR

对于调整大小,使用所有可能对输出值有贡献的像素的线性插值来计算输出像素值。对于其他变换,使用输入图像中 2x2 环境上的线性插值。

Resampling.HAMMING

Resampling.BILINEAR 产生更清晰的图像,不像 Resampling.BOX 那样在局部级别出现位移。此过滤器只能与 resize()thumbnail() 方法一起使用。

在版本 3.4.0 中添加。

Resampling.BICUBIC

对于调整大小,使用所有可能对输出值有贡献的像素的立方插值来计算输出像素值。对于其他变换,使用输入图像中 4x4 环境上的立方插值。

Resampling.LANCZOS

使用所有可能对输出值有贡献的像素上的高质量 Lanczos 滤波器(截断的 sinc)来计算输出像素值。此过滤器只能与 resize()thumbnail() 方法一起使用。

在版本 1.1.3 中添加。

过滤器比较表

过滤器

降采样质量

上采样质量

性能

Resampling.NEAREST

⭐⭐⭐⭐⭐

Resampling.BOX

⭐⭐⭐⭐

Resampling.BILINEAR

⭐⭐⭐

Resampling.HAMMING

⭐⭐

⭐⭐⭐

Resampling.BICUBIC

⭐⭐⭐

⭐⭐⭐

⭐⭐

Resampling.LANCZOS

⭐⭐⭐⭐

⭐⭐⭐⭐