ImageOps 模块

ImageOps 模块包含许多“现成”的图像处理操作。此模块有一些实验性,大多数操作仅适用于 L 和 RGB 图像。

在版本 1.1.3 中添加。

PIL.ImageOps.autocontrast(image: Image, cutoff: float | tuple[float, float] = 0, ignore: int | Sequence[int] | None = None, mask: Image | None = None, preserve_tone: bool = False) Image[source]

最大化(归一化)图像对比度。此函数计算输入图像(或掩码区域)的直方图,从直方图中移除cutoff 百分比的最亮和最暗像素,并将图像重新映射,使最暗像素变为黑色(0),最亮像素变为白色(255)。

参数::
  • image – 要处理的图像。

  • cutoff – 从低端和高端直方图中剪切的百分比。可以是 (low, high) 元组,也可以是表示两端的单个数字。

  • ignore – 背景像素值(如果不需要背景,则使用 None)。

  • mask – 用于对比度操作的直方图是使用掩码内的像素计算的。如果未提供掩码,则使用整个图像进行直方图计算。

  • preserve_tone

    以 Photoshop 风格的自动对比度保留图像色调。

    在版本 8.2.0 中添加。

返回值::

一张图像。

PIL.ImageOps.colorize(image: Image, black: str | tuple[int, ...], white: str | tuple[int, ...], mid: str | int | tuple[int, ...] | None = None, blackpoint: int = 0, whitepoint: int = 255, midpoint: int = 127) Image[source]

将灰度图像着色。此函数计算一个色带,将源图像中的所有黑色像素映射到第一个颜色,将所有白色像素映射到第二个颜色。如果指定了 mid,则使用三色映射。 blackwhite 参数应为 RGB 元组或颜色名称;可选地,您也可以通过指定 mid 来使用三色映射。可以指定任何颜色的映射位置(例如 blackpoint),其中这些参数是对应颜色应映射到的整数值。这些参数必须具有逻辑顺序,使得 blackpoint <= midpoint <= whitepoint(如果指定了 mid)。

参数::
  • image – 要着色的图像。

  • black – 用于黑色输入像素的颜色。

  • white – 用于白色输入像素的颜色。

  • mid – 用于中间色输入像素的颜色。

  • blackpoint – 黑色映射的整数值 [0, 255]。

  • whitepoint – 白色映射的整数值 [0, 255]。

  • midpoint – 中间色映射的整数值 [0, 255]。

返回值::

一张图像。

PIL.ImageOps.crop(image: Image, border: int = 0) Image[source]

从图像中去除边框。从所有四边去除相同数量的像素。此函数适用于所有图像模式。

另请参阅

crop()

参数::
  • image – 要裁剪的图像。

  • border – 要去除的像素数量。

返回值::

一张图像。

PIL.ImageOps.scale(image: Image, factor: float, resample: int = Resampling.BICUBIC) Image[source]

返回按参数中给定的特定因子重新缩放的图像。大于 1 的因子会扩展图像,0 到 1 之间的因子会压缩图像。

参数::
  • image – 要重新缩放的图像。

  • factor – 扩展因子,以浮点数表示。

  • resample – 要使用的重采样方法。默认值为 BICUBIC。请参阅 过滤器

返回值::

一个 Image 对象。

class PIL.ImageOps.SupportsGetMesh(*args, **kwargs)[source]

Bases: Protocol

支持 getmesh 方法的对象,该方法以图像作为参数,并返回一个元组列表。每个元组包含两个元组,源框作为 4 个整数的元组,以及最终四边形的 8 个整数的元组,按左上、左下、右下、右上的顺序排列。

PIL.ImageOps.deform(image: Image, deformer: SupportsGetMesh, resample: int = Resampling.BILINEAR) Image[source]

变形图像。

参数::
  • image – 要变形的图像。

  • deformer – 变形器对象。任何实现了 getmesh 方法的对象都可以使用。

  • resample – 可选的重采样过滤器。与 PIL.Image.transform 函数中可能的相同值。

返回值::

一张图像。

PIL.ImageOps.equalize(image: Image, mask: Image | None = None) Image[source]

均衡图像直方图。该函数对输入图像应用非线性映射,以在输出图像中创建灰度值的均匀分布。

参数::
  • image – 要均衡的图像。

  • mask – 可选的掩码。如果给出,则仅将掩码选择的像素包含在分析中。

返回值::

一张图像。

PIL.ImageOps.expand(image: Image, border: int | tuple[int, ...] = 0, fill: str | int | tuple[int, ...] = 0) Image[source]

在图像周围添加边框。

参数::
  • image – 要扩展的图像。

  • border – 边框宽度,以像素为单位。

  • fill – 像素填充值(颜色值)。默认值为 0(黑色)。

返回值::

一张图像。

PIL.ImageOps.flip(image: Image) Image[source]

垂直翻转图像(从上到下)。

参数::

image – 要翻转的图像。

返回值::

一张图像。

PIL.ImageOps.grayscale(image: Image) Image[source]

将图像转换为灰度。

参数::

image – 要转换的图像。

返回值::

一张图像。

PIL.ImageOps.invert(image: Image) Image[source]

反转(取反)图像。

参数::

image – 要反转的图像。

返回值::

一张图像。

PIL.ImageOps.mirror(image: Image) Image[source]

水平翻转图像(从左到右)。

参数::

image – 要镜像的图像。

返回值::

一张图像。

PIL.ImageOps.posterize(image: Image, bits: int) Image[source]

减少每个颜色通道的位数。

参数::
  • image – 要进行色调分离的图像。

  • bits – 每个通道要保留的位数(1-8)。

返回值::

一张图像。

PIL.ImageOps.solarize(image: Image, threshold: int = 128) Image[source]

反转高于阈值的像素值。

参数::
  • image – 要进行日晒的图像。

  • threshold – 所有高于此灰度级的像素都将被反转。

返回值::

一张图像。

PIL.ImageOps.exif_transpose(image: Image, *, in_place: bool = False) Image | None[source]

如果图像具有 EXIF 方向标签(除了 1 之外),则相应地转置图像,并删除方向数据。

参数::
  • image – 要转置的图像。

  • in_place – 布尔值。仅限关键字参数。如果为 True,则会就地修改原始图像,并返回 None。如果为 False(默认值),则将返回一个新的 Image 对象,其中已应用转置。如果没有转置,将返回图像的副本。

相对于给定大小调整大小

from PIL import Image, ImageOps
size = (100, 150)
with Image.open("Tests/images/hopper.webp") as im:
    ImageOps.contain(im, size).save("imageops_contain.webp")
    ImageOps.cover(im, size).save("imageops_cover.webp")
    ImageOps.fit(im, size).save("imageops_fit.webp")
    ImageOps.pad(im, size, color="#f00").save("imageops_pad.webp")

    # thumbnail() can also be used,
    # but will modify the image object in place
    im.thumbnail(size)
    im.save("image_thumbnail.webp")

thumbnail()

contain()

cover()

fit()

pad()

给定大小

(100, 150)

(100, 150)

(100, 150)

(100, 150)

(100, 150)

结果图像

../_images/image_thumbnail.webp ../_images/imageops_contain.webp ../_images/imageops_cover.webp ../_images/imageops_fit.webp ../_images/imageops_pad.webp

结果大小

100×100

100×100

150×150

100×150

100×150

PIL.ImageOps.contain(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC) Image[source]

返回图像的调整大小版本,设置为请求大小内的最大宽度和高度,同时保持原始纵横比。

参数::
  • image – 要调整大小的图像。

  • size – 请求的输出大小(以像素为单位),以 (宽度, 高度) 元组的形式给出。

  • method – 要使用的重采样方法。默认值为 BICUBIC。请参阅 过滤器.

返回值::

一张图像。

PIL.ImageOps.cover(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC) Image[source]

返回图像的调整大小版本,以便覆盖请求的大小,同时保持原始纵横比。

参数::
  • image – 要调整大小的图像。

  • size – 请求的输出大小(以像素为单位),以 (宽度, 高度) 元组的形式给出。

  • method – 要使用的重采样方法。默认值为 BICUBIC。请参阅 过滤器.

返回值::

一张图像。

PIL.ImageOps.fit(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC, bleed: float = 0.0, centering: tuple[float, float] = (0.5, 0.5)) Image[source]

返回图像的调整大小和裁剪版本,裁剪为请求的纵横比和大小。

此函数由 Kevin Cazabon 贡献。

参数::
  • image – 要调整大小和裁剪的图像。

  • size – 请求的输出大小(以像素为单位),以 (宽度, 高度) 元组的形式给出。

  • method – 要使用的重采样方法。默认值为 BICUBIC。请参阅 过滤器.

  • bleed – 从所有四个边缘移除图像外部的边框。该值是一个小数百分比(对一个百分比使用 0.01)。默认值为 0(无边框)。不能大于或等于 0.5。

  • centering – 控制裁剪位置。使用 (0.5, 0.5) 进行中心裁剪(例如,如果裁剪宽度,从左侧切掉 50%,因此从右侧切掉 50%)。(0.0, 0.0) 将从左上角裁剪(即,如果裁剪宽度,从右侧切掉所有裁剪,如果裁剪高度,从底部切掉所有裁剪)。(1.0, 0.0) 将从左下角裁剪,等等。(即,如果裁剪宽度,从左侧切掉所有裁剪,如果裁剪高度,从顶部不切掉任何裁剪,因此从底部切掉所有裁剪)。

返回值::

一张图像。

PIL.ImageOps.pad(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC, color: str | int | tuple[int, ...] | None = None, centering: tuple[float, float] = (0.5, 0.5)) Image[source]

返回图像的调整大小和填充版本,扩展以填充请求的纵横比和大小。

参数::
  • image – 要调整大小和裁剪的图像。

  • size – 请求的输出大小(以像素为单位),以 (宽度, 高度) 元组的形式给出。

  • method – 要使用的重采样方法。默认值为 BICUBIC。请参阅 过滤器.

  • color – 填充图像的背景色。

  • centering

    控制原始图像在填充版本中的位置。

    (0.5, 0.5) 将使图像保持居中 (0, 0) 将使图像保持对齐到左上角 (1, 1) 将使图像保持对齐到右下角

返回值::

一张图像。