Image
模块¶
Image
模块提供一个同名类,用于表示 PIL 图像。该模块还提供许多工厂函数,包括从文件加载图像的函数和创建新图像的函数。
示例¶
打开、旋转并显示图像(使用默认查看器)¶
以下脚本加载图像,将其旋转 45 度,并使用外部查看器(通常是 Unix 上的 xv,Windows 上的画图程序)进行显示。
from PIL import Image
with Image.open("hopper.jpg") as im:
im.rotate(45).show()
创建缩略图¶
以下脚本创建当前目录中所有 JPEG 图像的漂亮缩略图,保持纵横比,最大分辨率为 128x128。
from PIL import Image
import glob, os
size = 128, 128
for infile in glob.glob("*.jpg"):
file, ext = os.path.splitext(infile)
with Image.open(infile) as im:
im.thumbnail(size)
im.save(file + ".thumbnail", "JPEG")
函数¶
- PIL.Image.open(fp: StrOrBytesPath | IO[bytes], mode: Literal['r'] = 'r', formats: list[str] | tuple[str, ...] | None = None) ImageFile.ImageFile [source]¶
打开并识别给定的图像文件。
这是一个延迟操作;此函数识别文件,但文件保持打开状态,实际的图像数据不会从文件中读取,直到您尝试处理数据(或调用
load()
方法)。参见new()
。参见 Pillow 中的文件处理。- 参数:
fp – 文件名(字符串)、os.PathLike 对象或文件对象。文件对象必须实现
file.read
、file.seek
和file.tell
方法,并且以二进制模式打开。文件对象还将在读取之前定位到零。mode – 模式。如果给出,此参数必须为“r”。
formats – 要尝试加载文件的格式列表或元组。这可以用来限制检查的格式集。传递
None
以尝试所有支持的格式。您可以通过运行python3 -m PIL
或使用PIL.features.pilinfo()
函数来打印可用格式集。
- 返回值:
一个
Image
对象。- 异常:
FileNotFoundError – 如果找不到文件。
PIL.UnidentifiedImageError – 如果图像无法打开和识别。
ValueError – 如果
mode
不是“r”,或者如果StringIO
实例用于fp
。TypeError – 如果
formats
不是None
、列表或元组。
警告
为了防止由“解压缩炸弹”(即解压缩成大量数据并旨在通过使用大量内存来崩溃或造成中断的恶意文件)造成的潜在 DOS 攻击,Pillow 如果图像中的像素数量超过某个限制,
MAX_IMAGE_PIXELS
,将发出DecompressionBombWarning
。可以通过设置
MAX_IMAGE_PIXELS
来更改此阈值。可以通过设置Image.MAX_IMAGE_PIXELS = None
来禁用它。如果需要,可以通过
warnings.simplefilter('error', Image.DecompressionBombWarning)
将警告变成错误,或通过warnings.simplefilter('ignore', Image.DecompressionBombWarning)
完全抑制警告。另见 日志记录文档,将警告输出到日志记录工具而不是 stderr。如果像素数量大于两倍的
MAX_IMAGE_PIXELS
,则会引发DecompressionBombError
。
图像处理¶
- PIL.Image.alpha_composite(im1: Image, im2: Image) Image [source]¶
将 im2 以 alpha 混合方式叠加到 im1 上。
- 参数:
im1 – 第一个图像。必须为 RGBA 模式。
im2 – 第二个图像。必须为 RGBA 模式,并且与第一个图像大小相同。
- 返回值:
一个
Image
对象。
- PIL.Image.blend(im1: Image, im2: Image, alpha: float) Image [source]¶
使用常数 alpha 创建一个新的图像,该图像在两个输入图像之间插值。
out = image1 * (1.0 - alpha) + image2 * alpha
- 参数:
im1 – 第一个图像。
im2 – 第二个图像。必须与第一个图像具有相同的模式和大小。
alpha – 插值 alpha 因子。如果 alpha 为 0.0,则返回第一个图像的副本。如果 alpha 为 1.0,则返回第二个图像的副本。对 alpha 值没有限制。如有必要,结果将被剪裁以适合允许的输出范围。
- 返回值:
一个
Image
对象。
- PIL.Image.composite(image1: Image, image2: Image, mask: Image) Image [source]¶
使用透明蒙版通过混合图像来创建合成图像。
- 参数:
image1 – 第一个图像。
image2 – 第二个图像。必须与第一个图像具有相同的模式和大小。
mask – 蒙版图像。此图像可以具有“1”,“L”或“RGBA”模式,并且必须与其他两个图像具有相同的大小。
构造图像¶
- PIL.Image.new(mode: str, size: tuple[int, int] | list[int], color: float | tuple[float, ...] | str | None = 0) Image [source]¶
使用给定的模式和大小创建一个新图像。
- PIL.Image.fromarray(obj: SupportsArrayInterface, mode: str | None = None) Image [source]¶
从导出数组接口(使用缓冲区协议)的对象创建图像内存。
from PIL import Image import numpy as np a = np.zeros((5, 5)) im = Image.fromarray(a)
如果
obj
不连续,则调用tobytes
方法,并使用frombuffer()
。在 NumPy 的情况下,请注意 Pillow 模式并不总是对应于 NumPy 数据类型。Pillow 模式仅提供 1 位像素、8 位像素、32 位有符号整型像素和 32 位浮点像素。
Pillow 图像也可以转换为数组。
from PIL import Image import numpy as np im = Image.open("hopper.jpg") a = np.asarray(im)
但是,将 Pillow 图像转换为数组时,仅传输像素值。这意味着 P 和 PA 模式图像将丢失其调色板。
- 参数:
obj – 具有数组接口的对象
mode –
读取
obj
时要使用的可选模式。如果为None
,则将从类型确定。此方法不会在读取数据后用于转换数据,而是用于更改数据的读取方式。
from PIL import Image import numpy as np a = np.full((1, 1), 300) im = Image.fromarray(a, mode="L") im.getpixel((0, 0)) # 44 im = Image.fromarray(a, mode="RGB") im.getpixel((0, 0)) # (44, 1, 0)
参见:模式 了解有关模式的常规信息。
- 返回值:
一个图像对象。
在版本 1.1.6 中添加。
- PIL.Image.frombytes(mode: str, size: tuple[int, int], data: bytes | bytearray | SupportsArrayInterface, decoder_name: str = 'raw', *args: Any) Image [source]¶
从缓冲区中的像素数据创建图像内存的副本。
最简单形式下,此函数需要三个参数(模式、大小和解包后的像素数据)。
您还可以使用 PIL 支持的任何像素解码器。有关可用解码器的更多信息,请参阅编写您自己的文件编解码器 部分。
请注意,此函数仅解码像素数据,而不是整个图像。如果您有一个字符串中的整个图像,请将其包装在
BytesIO
对象中,并使用open()
加载它。
- PIL.Image.frombuffer(mode: str, size: tuple[int, int], data: bytes | SupportsArrayInterface, decoder_name: str = 'raw', *args: Any) Image [source]¶
创建一个引用字节缓冲区中像素数据的图像内存。
此函数类似于
frombytes()
,但使用字节缓冲区中的数据(如果可能)。这意味着对原始缓冲区对象的更改会反映在此图像中)。并非所有模式都可以共享内存;支持的模式包括“L”、“RGBX”、“RGBA”和“CMYK”。请注意,此函数仅解码像素数据,而不是整个图像。如果您有一个字符串中的整个图像文件,请将其包装在
BytesIO
对象中,并使用open()
加载它。用于“raw”解码器的默认参数与用于
frombytes()
的参数不同。这是一个 bug,可能会在将来的版本中修复。当前版本在您这样做时会发出警告;要禁用警告,您应该提供完整参数集。有关详细信息,请参见下文。- 参数:
mode – 图像模式。参见:模式.
size – 图像大小。
data – 包含给定模式的原始数据的字节或其他缓冲区对象。
decoder_name – 要使用的解码器。
args –
给定解码器的其他参数。对于默认编码器(“raw”),建议您提供完整参数集
frombuffer(mode, size, data, "raw", mode, 0, 1)
- 返回值:
一个
Image
对象。
在版本 1.1.4 中添加。
生成图像¶
- PIL.Image.effect_mandelbrot(size: tuple[int, int], extent: tuple[float, float, float, float], quality: int) Image [source]¶
生成覆盖给定范围的曼德布洛特集合。
- 参数:
size – 以 2 元组表示的请求大小(以像素为单位):(宽度,高度)。
extent – 以 4 元组表示的覆盖范围:(x0,y0,x1,y1)。
quality – 质量。
注册插件¶
- PIL.Image.register_open(id: str, factory: Callable[[IO[bytes], str | bytes], ImageFile.ImageFile] | type[ImageFile.ImageFile], accept: Callable[[bytes], bool | str] | None = None) None [source]¶
注册图像文件插件。此函数不应在应用程序代码中使用。
- 参数:
id – 图像格式标识符。
factory – 图像文件工厂方法。
accept – 可用于快速拒绝具有其他格式的图像的可选函数。
- PIL.Image.register_mime(id: str, mimetype: str) None [source]¶
通过填充
Image.MIME
注册图像 MIME 类型。此函数不应在应用程序代码中使用。Image.MIME
提供了从图像格式标识符到 mime 格式的映射,但get_format_mimetype()
可以为特定图像提供不同的结果。- 参数:
id – 图像格式标识符。
mimetype – 此格式的图像 MIME 类型。
- PIL.Image.register_save(id: str, driver: Callable[[Image, IO[bytes], str | bytes], None]) None [source]¶
注册图像保存函数。此函数不应在应用程序代码中使用。
- 参数:
id – 图像格式标识符。
driver – 以此格式保存图像的函数。
- PIL.Image.register_save_all(id: str, driver: Callable[[Image, IO[bytes], str | bytes], None]) None [source]¶
注册一个图像函数来保存多帧格式的所有帧。此函数不应在应用程序代码中使用。
- 参数:
id – 图像格式标识符。
driver – 以此格式保存图像的函数。
- PIL.Image.register_extension(id: str, extension: str) None [source]¶
注册图像扩展名。此函数不应在应用程序代码中使用。
- 参数:
id – 图像格式标识符。
extension – 此格式使用的扩展名。
- PIL.Image.register_extensions(id: str, extensions: list[str]) None [source]¶
注册图像扩展名。此函数不应在应用程序代码中使用。
- 参数:
id – 图像格式标识符。
extensions – 此格式使用的扩展名列表。
图像类¶
一个 Image
类的实例具有以下方法。除非另有说明,否则所有方法都返回一个新的 Image
类的实例,包含结果图像。
- Image.alpha_composite(im: Image, dest: Sequence[int] = (0, 0), source: Sequence[int] = (0, 0)) None [source]¶
Image.alpha_composite 的“就地”模拟。将一个图像合成到此图像上。
- 参数:
im – 要在此图像上合成的图像
dest – 可选的 2 元组 (left, top),指定此(目标)图像中的左上角。
source – 可选的 2 元组 (left, top),用于覆盖源图像中的左上角,或 4 元组 (left, top, right, bottom),用于源矩形的边界
性能说明:当前在核心层中未就地实现。
- Image.apply_transparency() None [source]¶
如果 P 模式图像在 info 字典中有一个“transparency”键,则删除该键,而是将透明度应用于调色板。否则,图像保持不变。
- Image.convert(mode: str | None = None, matrix: tuple[float, ...] | None = None, dither: Dither | None = None, palette: Palette = Palette.WEB, colors: int = 256) Image [source]¶
返回此图像的转换副本。对于“P”模式,此方法通过调色板转换像素。如果省略 mode,则会选择一个模式,以便可以在没有调色板的情况下表示图像和调色板中的所有信息。
此方法支持“L”、 “RGB”和“CMYK”之间所有可能的转换。
matrix
参数仅支持“L”和“RGB”。将彩色图像转换为灰度(模式“L”)时,库使用 ITU-R 601-2 亮度变换
L = R * 299/1000 + G * 587/1000 + B * 114/1000
将灰度(“L”)或“RGB”图像转换为双色调(模式“1”)的默认方法使用 Floyd-Steinberg 抖动来近似原始图像亮度级别。如果 dither 为
None
,则所有大于 127 的值都设置为 255(白色),所有其他值都设置为 0(黑色)。要使用其他阈值,请使用point()
方法。从“RGBA”转换为“P”且没有
matrix
参数时,此方法将操作传递给quantize()
,并且会忽略dither
和palette
。从“PA”转换时,如果存在“RGBA”调色板,则将使用图像中的 alpha 通道,而不是调色板中的值。
- 参数:
mode – 请求的模式。请参阅:模式.
matrix – 可选转换矩阵。如果给出,则它应为包含浮点值的 4 元组或 12 元组。
dither – 抖动方法,用于从模式“RGB”转换为“P”或从“RGB”或“L”转换为“1”。可用的方法有
Dither.NONE
或Dither.FLOYDSTEINBERG
(默认)。请注意,当提供matrix
时,不使用此方法。palette – 从模式“RGB”转换为“P”时使用的调色板。可用的调色板有
Palette.WEB
或Palette.ADAPTIVE
.colors –
Palette.ADAPTIVE
调色板要使用的颜色数量。默认值为 256。
- 返回类型:
- 返回值:
一个
Image
对象。
以下示例将 RGB 图像(根据 ITU-R 709 线性校准,使用 D65 亮度)转换为 CIE XYZ 色彩空间
rgb2xyz = (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0)
out = im.convert("RGB", rgb2xyz)
- Image.crop(box: tuple[float, float, float, float] | None = None) Image [source]¶
返回此图像的矩形区域。box 是一个 4 元组,定义了左、上、右和下像素坐标。请参阅 坐标系.
注意:在 Pillow 3.4.0 之前,这是一个延迟操作。
此方法使用提供的坐标裁剪输入图像
from PIL import Image
with Image.open("hopper.jpg") as im:
# The crop method from the Image module takes four coordinates as input.
# The right can also be represented as (left+width)
# and lower can be represented as (upper+height).
(left, upper, right, lower) = (20, 20, 100, 100)
# Here the image "im" is cropped and assigned to new variable im_crop
im_crop = im.crop((left, upper, right, lower))
- Image.draft(mode: str | None, size: tuple[int, int] | None) tuple[str, tuple[int, int, float, float]] | None [source]¶
配置图像文件加载器,以便它返回尽可能接近给定模式和大小的图像版本。例如,您可以使用此方法在加载时将彩色 JPEG 转换为灰度。
如果进行了任何更改,则返回一个元组,其中包含所选的
mode
和box
,其中包含原始图像在修改后的图像中的坐标。请注意,此方法会就地修改
Image
对象。如果图像已经加载,此方法将无效。注意:此方法尚未在大多数图像上实现。目前仅针对 JPEG 和 MPO 图像实现。
- 参数:
mode – 所需模式。
size – 以 2 元组表示的请求大小(以像素为单位):(宽度,高度)。
- Image.entropy(mask: Image | None = None, extrema: tuple[float, float] | None = None) float [source]¶
计算并返回图像的熵。
双色调图像(模式“1”)由此方法视为灰度图像(“L”)。
如果提供了蒙版,则该方法将使用蒙版图像非零部分的直方图。蒙版图像的大小必须与图像相同,并且必须是双色调图像(模式“1”)或灰度图像(“L”)。
- 参数:
mask – 可选蒙版。
extrema – 可选的,手动指定的极值元组。
- 返回值:
表示图像熵的浮点值
- Image.filter(filter: ImageFilter.Filter | type[ImageFilter.Filter]) Image [source]¶
使用给定的滤镜对该图像进行滤波。有关可用滤镜的列表,请参见
ImageFilter
模块。- 参数:
filter – 滤镜内核。
- 返回值:
一个
Image
对象。
这会使用 ImageFilter
模块中的滤镜模糊输入图像
from PIL import Image, ImageFilter
with Image.open("hopper.jpg") as im:
# Blur the input image using the filter ImageFilter.BLUR
im_blurred = im.filter(filter=ImageFilter.BLUR)
- Image.frombytes(data: bytes | bytearray | SupportsArrayInterface, decoder_name: str = 'raw', *args: Any) None [source]¶
使用字节对象中的像素数据加载此图像。
此方法类似于
frombytes()
函数,但将数据加载到此图像中,而不是创建新的图像对象。
- Image.getbands() tuple[str, ...] [source]¶
返回一个元组,其中包含此图像中每个波段的名称。例如,RGB 图像上的
getbands
返回(“R”、“G”、“B”)。- 返回值:
包含波段名称的元组。
- 返回类型:
这有助于获取输入图像的波段
from PIL import Image
with Image.open("hopper.jpg") as im:
print(im.getbands()) # Returns ('R', 'G', 'B')
- Image.getbbox(*, alpha_only: bool = True) tuple[int, int, int, int] | None [source]¶
计算图像中非零区域的边界框。
- 参数:
alpha_only – 可选标志,默认为
True
。如果为True
且图像具有 alpha 通道,则修剪透明像素。否则,当所有通道都为零时,修剪像素。关键字参数。- 返回值:
边界框作为 4 元组返回,定义左、上、右和下像素坐标。请参见 坐标系。如果图像完全为空,则此方法返回 None。
这有助于获取输入图像的边界框坐标
from PIL import Image
with Image.open("hopper.jpg") as im:
print(im.getbbox())
# Returns four coordinates in the format (left, upper, right, lower)
- Image.getchannel(channel: int | str) Image [source]¶
返回包含源图像单个通道的图像。
- 参数:
channel – 要返回的通道。可以是索引(“RGB” 的“R”通道为 0)或通道名称(“RGBA” 的 alpha 通道为“A”)。
- 返回值:
“L”模式下的图像。
在版本 4.3.0 中添加。
- Image.getcolors(maxcolors: int = 256) list[tuple[int, tuple[int, ...]]] | list[tuple[int, float]] | None [source]¶
返回图像中使用的颜色列表。
颜色将以图像的模式显示。例如,RGB 图像将返回一个包含 (red, green, blue) 颜色值的元组,而 P 图像将返回调色板中颜色的索引。
- 参数:
maxcolors – 最大颜色数。如果超过此数量,该方法将返回 None。默认限制为 256 种颜色。
- 返回值:
一个包含 (count, pixel) 值的无序列表。
- Image.getdata(band: int | None = None) core.ImagingCore [source]¶
将图像内容作为包含像素值的序列对象返回。序列对象是扁平化的,因此第 1 行的值紧随第 0 行的值,以此类推。
请注意,此方法返回的序列对象是 PIL 内部数据类型,它只支持某些序列操作。要将其转换为普通序列(例如,用于打印),请使用
list(im.getdata())
。- 参数:
band – 要返回的波段。默认值为返回所有波段。要返回单个波段,请传入索引值(例如,0 表示从“RGB”图像获取“R”波段)。
- 返回值:
类似序列的对象。
- Image.getextrema() tuple[float, float] | tuple[tuple[int, int], ...] [source]¶
获取图像中每个波段的最小和最大像素值。
- 返回值:
对于单波段图像,一个包含最小和最大像素值的 2 元组。对于多波段图像,一个包含每个波段的一个 2 元组的元组。
- Image.getpalette(rawmode: str | None = 'RGB') list[int] | None [source]¶
以列表形式返回图像调色板。
- 参数:
rawmode –
返回调色板的模式。
None
将以其当前模式返回调色板。在版本 9.1.0 中添加。
- 返回值:
一个颜色值列表 [r, g, b, …],如果图像没有调色板,则为 None。
- Image.getpixel(xy: tuple[int, int] | list[int]) float | tuple[int, ...] | None [source]¶
返回给定位置的像素值。
- 参数:
xy – 坐标,表示为 (x, y)。请参见 坐标系.
- 返回值:
像素值。如果图像为多层图像,则此方法将返回一个元组。
- Image.getprojection() tuple[list[int], list[int]] [source]¶
获取 X 轴和 Y 轴的投影
- 返回值:
两个序列,分别表示 X 轴和 Y 轴上非零像素的位置。
- Image.histogram(mask: Image | None = None, extrema: tuple[float, float] | None = None) list[int] [source]¶
返回图像的直方图。直方图以像素计数列表的形式返回,每个像素值对应源图像中的一个像素计数。计数被分组到每个波段的 256 个 bin 中,即使图像每个波段超过 8 位也是如此。如果图像有多个波段,则所有波段的直方图将被连接起来(例如,“RGB”图像的直方图包含 768 个值)。
双色调图像(模式“1”)由此方法视为灰度图像(“L”)。
如果提供了一个蒙版,该方法将返回图像中蒙版图像非零部分的直方图。蒙版图像必须与图像具有相同的大小,并且是双层图像(模式“1”)或灰度图像(“L”)。
- 参数:
mask – 可选蒙版。
extrema – 可选的,手动指定的极值元组。
- 返回值:
包含像素计数的列表。
- Image.paste(im: Image | str | float | tuple[float, ...], box: Image | tuple[int, int, int, int] | tuple[int, int] | None = None, mask: Image | None = None) None [source]¶
将另一张图像粘贴到此图像中。box 参数可以是:给出左上角的 2 元组,定义左、上、右和下像素坐标的 4 元组,或者 None(与 (0, 0) 相同)。参见 坐标系。如果给出 4 元组,则粘贴图像的大小必须与区域的大小匹配。
如果模式不匹配,则粘贴图像将被转换为此图像的模式(有关详细信息,请参见
convert()
方法)。源图像可以是图像、包含像素值的整数或元组。该方法将使用给定的颜色填充区域。在创建 RGB 图像时,您还可以使用 ImageColor 模块支持的颜色字符串。
如果给出了蒙版,此方法将仅更新蒙版指示的区域。您可以使用“1”、“L”、“LA”、“RGBA”或“RGBa”图像(如果存在,则使用 alpha 波段作为蒙版)。在蒙版为 255 的位置,给定图像按原样复制。在蒙版为 0 的位置,当前值将被保留。中间值将混合两个图像,包括它们的 alpha 通道(如果有)。
如果您希望根据 alpha 通道组合图像,请参见
alpha_composite()
。- 参数:
im – 源图像或像素值(整数、浮点数或元组)。
box –
可选的 4 元组,指定要粘贴的区域。如果使用 2 元组,则将其视为左上角。如果省略或为 None,则源图像将粘贴到左上角。
如果将图像作为第二个参数给出,而没有第三个参数,则 box 默认为 (0, 0),第二个参数被解释为蒙版图像。
mask – 可选的蒙版图像。
- Image.point(lut: Sequence[float] | NumpyArray | Callable[[int], float] | Callable[[ImagePointTransform], ImagePointTransform | float] | ImagePointHandler, mode: str | None = None) Image [source]¶
将此图像映射到查找表或函数。
- 参数:
lut –
查找表,包含图像中每个波段的 256 个(或 65536 个,如果 self.mode ==“I”且 mode ==“L”)值。可以使用函数代替,它应该接受一个参数。对每个可能的像素值调用一次函数,并将生成的表应用于图像的所有波段。
它也可以是
ImagePointHandler
对象class Example(Image.ImagePointHandler): def point(self, im: Image) -> Image: # Return result
mode – 输出模式(默认与输入相同)。这仅在源图像的模式为“L”或“P”且输出模式为“1”或源图像模式为“I”且输出模式为“L”时可以使用。
- 返回值:
一个
Image
对象。
- Image.putalpha(alpha: Image | int) None [source]¶
在图像中添加或替换 alpha 通道。如果图像没有 alpha 通道,则将其转换为“LA”或“RGBA”。新的 alpha 通道必须是“L”或“1”。
- 参数:
alpha – 新的 alpha 通道。可以是与当前图像尺寸相同的“L”或“1”图像,也可以是整数。
- Image.putdata(data: Sequence[float] | Sequence[Sequence[int]] | core.ImagingCore | NumpyArray, scale: float = 1.0, offset: float = 0.0) None [source]¶
将像素数据从扁平化的序列对象复制到图像中。数据应从左上角 (0, 0) 开始,一直到行的末尾,然后紧接第二行的第一个值,依此类推。数据将持续读取,直到图像或序列结束。比例和偏移值用于调整序列值:像素 = 值*比例 + 偏移。
- 参数:
data – 扁平化的序列对象。
scale – 可选的比例值。默认值为 1.0。
offset – 可选的偏移值。默认值为 0.0。
- Image.putpalette(data: ImagePalette.ImagePalette | bytes | Sequence[int], rawmode: str = 'RGB') None [source]¶
将调色板附加到图像。图像必须是“P”、“PA”、“L”或“LA”图像。
调色板序列最多包含 256 种颜色,每种颜色由 raw 模式中每个通道的一个整数值组成。例如,如果 raw 模式为“RGB”,则它最多包含 768 个值,构成 256 种颜色中相应像素索引的红色、绿色和蓝色值。如果 raw 模式为“RGBA”,则它最多包含 1024 个值,包含红色、绿色、蓝色和 alpha 值。
或者,可以使用 8 位字符串代替整数序列。
- 参数:
data – 调色板序列(列表或字符串)。
rawmode – 调色板的 raw 模式。可以是“RGB”、“RGBA”,或者可以转换为“RGB”或“RGBA”的模式(例如“R”、“BGR;15”、“RGBA;L”)。
- Image.putpixel(xy: tuple[int, int], value: float | tuple[int, ...] | list[int]) None [source]¶
修改给定位置的像素。颜色对于单波段图像使用单个数值表示,对于多波段图像使用元组表示。此外,对于 P 和 PA 图像,还接受 RGB 和 RGBA 元组。
请注意,此方法相对较慢。对于更广泛的更改,请使用
paste()
或ImageDraw
模块。参见
- 参数:
xy – 像素坐标,以 (x, y) 表示。参见 坐标系.
value – 像素值。
- Image.quantize(colors: int = 256, method: int | None = None, kmeans: int = 0, palette: Image | None = None, dither: Dither = Dither.FLOYDSTEINBERG) Image [source]¶
将图像转换为使用指定颜色数量的‘P’模式。
- 参数:
colors – 需要的颜色数量,<= 256
method –
Quantize.MEDIANCUT
(中值切割法),Quantize.MAXCOVERAGE
(最大覆盖法),Quantize.FASTOCTREE
(快速八叉树),Quantize.LIBIMAGEQUANT
(libimagequant; 使用PIL.features.check_feature()
和feature="libimagequant"
检查支持情况).默认情况下,将使用
Quantize.MEDIANCUT
。RGBA 图像除外。
Quantize.MEDIANCUT
和Quantize.MAXCOVERAGE
不支持 RGBA 图像,因此默认情况下使用Quantize.FASTOCTREE
。kmeans – 大于或等于零的整数。
palette – 量化为给定
PIL.Image.Image
的调色板。dither – 抖动方法,在从模式“RGB”转换为“P”或从“RGB”或“L”转换为“1”时使用。 可用方法为
Dither.NONE
或Dither.FLOYDSTEINBERG
(默认)。
- 返回值:
一个新的图像
- Image.reduce(factor: int | tuple[int, int], box: tuple[int, int, int, int] | None = None) Image [source]¶
返回图像缩小
factor
倍后的副本。如果图像大小不能被factor
整除,则最终大小将向上取整。- 参数:
factor – 大于 0 的整数或包含两个整数的元组,分别表示宽度和高度。
box – 包含四个整数的元组,可选,表示要缩小的源图像区域。值必须位于
(0, 0, width, height)
矩形内。如果省略或为None
,则使用整个源图像。
- Image.remap_palette(dest_map: list[int], source_palette: bytes | bytearray | None = None) Image [source]¶
重写图像以重新排序调色板。
- 参数:
dest_map – 指向原始调色板的索引列表。 例如,
[1,0]
将交换两个项目调色板,而list(range(256))
是标识转换。source_palette – 字节或 None。
- 返回值:
一个
Image
对象。
- Image.resize(size: tuple[int, int] | list[int] | NumpyArray, resample: int | None = None, box: tuple[float, float, float, float] | None = None, reducing_gap: float | None = None) Image [source]¶
返回此图像的调整大小后的副本。
- 参数:
size – 以像素为单位的请求大小,作为元组或数组:(宽度,高度)。
resample – 可选的重采样滤波器。它可以是以下之一:
Resampling.NEAREST
、Resampling.BOX
、Resampling.BILINEAR
、Resampling.HAMMING
、Resampling.BICUBIC
或Resampling.LANCZOS
。如果图像模式为“1”或“P”,则始终设置为Resampling.NEAREST
。如果图像模式为“BGR;15”、“BGR;16”或“BGR;24”,则默认滤波器为Resampling.NEAREST
。否则,默认滤波器为Resampling.BICUBIC
。参见:Filters.box – 可选的 4 元组浮点数,提供要缩放的源图像区域。这些值必须在 (0, 0, 宽度, 高度) 矩形内。如果省略或为 None,则使用整个源图像。
reducing_gap – 使用两步对图像进行调整大小以进行优化。首先,使用
reduce()
将图像按整数倍缩小。其次,使用常规重采样调整大小。最后一步将大小至少更改reducing_gap
倍。reducing_gap
可以是 None(不执行第一步)或大于 1.0。reducing_gap
越大,结果越接近公平重采样。reducing_gap
越小,调整大小的速度越快。当reducing_gap
大于或等于 3.0 时,在大多数情况下,结果与公平重采样无法区分。默认值为 None(没有优化)。
- 返回值:
一个
Image
对象。
这将给定图像从 (宽度, 高度)
调整大小到 (宽度/2, 高度/2)
from PIL import Image
with Image.open("hopper.jpg") as im:
# Provide the target width and height of the image
(width, height) = (im.width // 2, im.height // 2)
im_resized = im.resize((width, height))
- Image.rotate(angle: float, resample: Resampling = Resampling.NEAREST, expand: int | bool = False, center: tuple[float, float] | None = None, translate: tuple[int, int] | None = None, fillcolor: float | tuple[float, ...] | str | None = None) Image [source]¶
返回此图像的旋转副本。此方法返回此图像的副本,以给定的度数逆时针绕其中心旋转。
- 参数:
angle – 逆时针方向以度为单位。
resample – 可选的重采样滤波器。它可以是以下之一:
Resampling.NEAREST
(使用最近邻)、Resampling.BILINEAR
(2x2 环境中的线性插值)或Resampling.BICUBIC
(4x4 环境中的三次样条插值)。如果省略,或如果图像模式为“1”或“P”,则设置为Resampling.NEAREST
。参见 Filters.expand – 可选的扩展标志。如果为真,则扩展输出图像以使其足够大以容纳整个旋转图像。如果为假或省略,则使输出图像与输入图像大小相同。请注意,扩展标志假定绕中心旋转,没有平移。
center – 可选的旋转中心(2 元组)。原点是左上角。默认为图像中心。
translate – 可选的旋转后平移(2 元组)。
fillcolor – 可选的旋转图像外部区域的颜色。
- 返回值:
一个
Image
对象。
这将输入图像逆时针旋转 theta
度
from PIL import Image
with Image.open("hopper.jpg") as im:
# Rotate the image by 60 degrees counter clockwise
theta = 60
# Angle is in degrees counter clockwise
im_rotated = im.rotate(angle=theta)
- Image.save(fp: StrOrBytesPath | IO[bytes], format: str | None = None, **params: Any) None [source]¶
将此图像保存到给定的文件名下。如果未指定格式,则尽可能从文件名扩展名确定要使用的格式。
关键字选项可用于向写入器提供其他说明。如果写入器不识别某个选项,则会静默忽略它。可用选项在每个写入器的图像格式文档中进行了描述。
可以使用文件对象而不是文件名。在这种情况下,必须始终指定格式。文件对象必须实现
seek
、tell
和write
方法,并且必须以二进制模式打开。- 参数:
fp – 文件名(字符串)、os.PathLike 对象或文件对象。
format – 可选的格式覆盖。如果省略,则从文件名扩展名确定要使用的格式。如果使用了文件对象而不是文件名,则应始终使用此参数。
params – 传递给图像写入器的额外参数。
- 返回值:
None
- 异常:
ValueError – 如果无法从文件名确定输出格式。使用 format 选项解决此问题。
OSError – 如果无法写入文件。文件可能已创建,并且可能包含部分数据。
- Image.seek(frame: int) None [source]¶
将此序列文件中的指针移动到给定的帧。如果超出序列的末尾,该方法将引发
EOFError
异常。打开序列文件时,库会自动将指针移动到帧 0。参见
tell()
。如果已定义,
n_frames
指的是可用帧的数量。- 参数:
frame – 帧号,从 0 开始。
- 异常:
EOFError – 如果调用尝试将指针移动到序列的末尾以外。
- Image.show(title: str | None = None) None [source]¶
显示此图像。此方法主要用于调试目的。
此方法在内部调用
PIL.ImageShow.show()
。可以使用PIL.ImageShow.register()
覆盖其默认行为。图像首先保存到一个临时文件。默认情况下,它将使用 PNG 格式。
在 Unix 上,图像将使用 xdg-open、display、gm、eog 或 xv 实用程序打开,具体取决于可以找到哪一个。
在 macOS 上,图像将使用本机预览应用程序打开。
在 Windows 上,图像将使用标准 PNG 显示实用程序打开。
- 参数:
title – 可选标题,用于图像窗口(如果可能)。
- Image.split() tuple[Image, ...] [source]¶
将此图像拆分为单独的波段。此方法从图像中返回一个包含单独图像波段的元组。例如,拆分“RGB”图像会创建三个新图像,每个图像都包含原始波段之一的副本(红色、绿色、蓝色)。
如果您只需要一个波段,
getchannel()
方法可能更方便快捷。- 返回值:
包含波段的元组。
- Image.thumbnail(size: tuple[float, float], resample: Resampling = Resampling.BICUBIC, reducing_gap: float | None = 2.0) None [source]¶
将此图像缩略图化。此方法修改图像,使其包含自身缩略图版本,不超过给定的尺寸。此方法计算适当的缩略图尺寸以保留图像的纵横比,调用
draft()
方法配置文件阅读器(如果适用),最后调整图像大小。请注意,此函数会就地修改
Image
对象。如果您还需要使用全分辨率图像,请将此方法应用于原始图像的copy()
。- 参数:
size – 以 2 元组表示的请求大小(以像素为单位):(宽度,高度)。
resample – 可选重采样滤波器。可以是
Resampling.NEAREST
、Resampling.BOX
、Resampling.BILINEAR
、Resampling.HAMMING
、Resampling.BICUBIC
或Resampling.LANCZOS
之一。如果省略,则默认为Resampling.BICUBIC
。(在 2.5.0 版本之前是Resampling.NEAREST
)。参见:过滤器。reducing_gap – 通过两步调整图像大小来应用优化。首先,使用
reduce()
或draft()
(对于 JPEG 图像)将图像按整数倍缩小。其次,使用常规重采样调整大小。最后一步将大小改变不少于reducing_gap
倍。reducing_gap
可以是 None(不执行第一步)或应大于 1.0。reducing_gap
越大,结果越接近公平重采样。reducing_gap
越小,调整大小的速度越快。对于reducing_gap
大于或等于 3.0,在大多数情况下,结果与公平重采样不可区分。默认值为 2.0(非常接近公平重采样,同时在许多情况下仍然更快)。
- 返回值:
None
- Image.tobitmap(name: str = 'image') bytes [source]¶
返回转换为 X11 位图的图像。
注意
此方法仅适用于模式“1”图像。
- 参数:
name – 用于位图变量的名称前缀。
- 返回值:
包含 X11 位图的字符串。
- 异常:
ValueError – 如果模式不是“1”
- Image.tobytes(encoder_name: str = 'raw', *args: Any) bytes [source]¶
将图像作为字节对象返回。
警告
此方法返回内部存储中的原始图像数据。对于压缩图像数据(例如 PNG、JPEG),请使用
save()
,并使用 BytesIO 参数进行内存中数据。- 参数:
encoder_name –
要使用的编码器。默认情况下,使用标准“raw”编码器。
可以在
_imaging.c
中的函数数组的 codecs 部分中看到 C 编码器的列表。Python 编码器在相关的插件中注册。args – 传递给编码器的额外参数。
- 返回值:
一个
bytes
对象。
- Image.transform(size: tuple[int, int], method: Transform | ImageTransformHandler | SupportsGetData, data: Sequence[Any] | None = None, resample: int = Resampling.NEAREST, fill: int = 1, fillcolor: float | tuple[float, ...] | str | None = None) Image [source]¶
变换此图像。此方法使用给定的变换创建具有给定大小和与原始图像相同模式的新图像,并将数据复制到新图像。
- 参数:
size – 输出大小(以像素为单位),表示为 2 元组:(宽度,高度)。
method –
变换方法。它是
Transform.EXTENT
(剪切矩形子区域)、Transform.AFFINE
(仿射变换)、Transform.PERSPECTIVE
(透视变换)、Transform.QUAD
(将四边形映射到矩形)或Transform.MESH
(在一个操作中映射多个源四边形)之一。它也可以是
ImageTransformHandler
对象。class Example(Image.ImageTransformHandler): def transform(self, size, data, resample, fill=1): # Return result
在
ImageTransform
中提供了一些Transform
方法的ImageTransformHandler
实现。它也可以是具有
method.getdata
方法的对象,该方法返回一个元组,用于提供新的method
和data
值。class Example: def getdata(self): method = Image.Transform.EXTENT data = (0, 0, 100, 100) return method, data
data – 传递给变换方法的额外数据。
resample – 可选的重采样过滤器。它可以是
Resampling.NEAREST
(使用最近邻)、Resampling.BILINEAR
(2x2 环境中的线性插值)或Resampling.BICUBIC
(4x4 环境中的三次样条插值)之一。如果省略,或者如果图像具有“1”或“P”模式,则将其设置为Resampling.NEAREST
。参见:过滤器.fill – 如果
method
是ImageTransformHandler
对象,则这是传递给它的参数之一。否则,它不会被使用。fillcolor – 输出图像中变换区域外部的可选填充颜色。
- 返回值:
一个
Image
对象。
- Image.transpose(method: Transpose) Image [source]¶
转置图像(以 90 度步长翻转或旋转)
- 参数:
method –
Transpose.FLIP_LEFT_RIGHT
、Transpose.FLIP_TOP_BOTTOM
、Transpose.ROTATE_90
、Transpose.ROTATE_180
、Transpose.ROTATE_270
、Transpose.TRANSPOSE
或Transpose.TRANSVERSE
之一。- 返回值:
返回此图像的翻转或旋转副本。
此方法使用 Transpose.FLIP_LEFT_RIGHT
方法翻转输入图像。
from PIL import Image
with Image.open("hopper.jpg") as im:
# Flip the image from left to right
im_flipped = im.transpose(method=Image.Transpose.FLIP_LEFT_RIGHT)
# To flip the image from top to bottom,
# use the method "Image.Transpose.FLIP_TOP_BOTTOM"
- Image.verify() None [source]¶
验证文件内容。对于从文件读取的数据,此方法尝试确定文件是否损坏,而无需实际解码图像数据。如果此方法发现任何问题,它将引发合适的异常。如果您需要在使用此方法后加载图像,则必须重新打开图像文件。
- Image.load() core.PixelAccess | None [source]¶
为图像分配存储空间并加载像素数据。在正常情况下,您不需要调用此方法,因为 Image 类在首次访问时会自动加载打开的图像。
如果与图像关联的文件是由 Pillow 打开的,那么此方法将关闭它。例外情况是,如果图像具有多个帧,在这种情况下,文件将保持打开状态以进行查找操作。有关更多信息,请参阅 Pillow 中的文件处理。
- 返回值:
一个图像访问对象。
- 返回类型:
- Image.close() None [source]¶
如果可能,关闭文件指针。
此操作将销毁图像核心并释放其内存。图像数据之后将无法使用。
此函数用于关闭具有多个帧或其文件尚未由
load()
方法读取并关闭的图像。有关更多信息,请参阅 Pillow 中的文件处理。
图像属性¶
Image
类的实例具有以下属性
- Image.palette: PIL.ImagePalette.ImagePalette | None¶
如果有的话,颜色调色板表。如果模式为“P”或“PA”,则这应该是一个
ImagePalette
类的实例。否则,它应该设置为None
。
- Image.info: dict¶
包含与图像关联数据的字典。此字典由文件处理程序用于传递从文件中读取的各种非图像信息。有关详细信息,请参阅各个文件处理程序的文档。
大多数方法在返回新图像时会忽略该字典;由于键未标准化,因此方法无法知道操作是否影响字典。如果您稍后需要该信息,请保留对从 open 方法返回的 info 字典的引用。
除非另有说明,否则此字典不会影响保存文件。
- Image.is_animated: bool¶
如果此图像具有多个帧,则为
True
,否则为False
。此属性仅由支持动画图像的图像插件定义。如果插件不支持加载动画图像,即使给定格式支持动画图像,插件也可能会使此属性保持未定义状态。
鉴于此属性并非所有图像都存在,因此使用
getattr(image, "is_animated", False)
来检查 Pillow 是否知道图像中的多个帧,无论其格式如何。
- Image.n_frames: int¶
此图像中的帧数。
此属性仅由支持动画图像的图像插件定义。如果插件不支持加载动画图像,即使给定格式支持动画图像,插件也可能会使此属性保持未定义状态。
鉴于此属性并非所有图像都存在,因此使用
getattr(image, "n_frames", 1)
来检查 Pillow 知道的图像中帧数,无论其格式如何。另请参阅
- Image.has_transparency_data¶
确定图像是否具有透明度数据,无论是以 alpha 通道、带有 alpha 通道的调色板还是 info 字典中的“transparency”键的形式。
请注意,如果显示的所有值都是不透明的,则图像仍然可能显示为实心。
- 返回值:
一个布尔值。
类¶
- class PIL.Image.Exif[source]¶
Bases:
MutableMapping
此类提供对 EXIF 图像数据的读写访问
from PIL import Image im = Image.open("exif.png") exif = im.getexif() # Returns an instance of this class
信息可以读取和写入、迭代或删除
print(exif[274]) # 1 exif[274] = 2 for k, v in exif.items(): print("Tag", k, "Value", v) # Tag 274 Value 2 del exif[274]
要访问 IFD0 以外的信息,
get_ifd()
返回一个字典from PIL import ExifTags im = Image.open("exif_gps.jpg") exif = im.getexif() gps_ifd = exif.get_ifd(ExifTags.IFD.GPSInfo) print(gps_ifd)
其他 IFD 包括
ExifTags.IFD.Exif
、ExifTags.IFD.Makernote
、ExifTags.IFD.Interop
和ExifTags.IFD.IFD1
。ExifTags
还具有枚举类以提供数据的名称print(exif[ExifTags.Base.Software]) # PIL print(gps_ifd[ExifTags.GPS.GPSDateStamp]) # 1999:99:99 99:99:99
- bigtiff = False¶
- class PIL.Image.ImagePointTransform(scale: float, offset: float)[source]¶
与
point()
一起用于具有 8 位以上单通道图像,表示仿射变换,其中值乘以scale
并添加offset
。
- class PIL.Image.ImageTransformHandler[source]¶
用于几何变换的混合类(用于
transform()
)
协议¶
常量¶
- PIL.Image.NONE¶
- PIL.Image.WARN_POSSIBLE_FORMATS¶
设置为 false。如果为 true,则在无法识别图像时,将从尝试读取数据的格式中引发警告。
转置方法¶
用于指定要使用的 Image.transpose()
方法。
变换方法¶
用于指定要使用的 Image.transform()
方法。
重采样滤波器¶
有关详细信息,请参见滤波器。
抖动模式¶
用于为 convert()
和 quantize()
方法指定要使用的抖动方法。
调色板¶
用于为 convert()
方法指定要使用的调色板。
量化方法¶
用于为 quantize()
方法指定要使用的量化方法。