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[原始碼]

最大化(正規化)影像對比。此函式會計算輸入影像(或遮罩區域)的直方圖,從直方圖中移除 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[原始碼]

將灰階圖像著色。此函式會計算一個顏色楔形,將來源圖像中所有黑色像素對應到第一個顏色,所有白色像素對應到第二個顏色。如果指定了 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[原始碼]

從圖像移除邊框。從所有四個邊移除相同數量的像素。此函式適用於所有圖像模式。

另請參閱

crop()

參數:
  • image – 要裁剪的圖像。

  • border – 要移除的像素數。

返回:

一個影像。

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

依據參數中指定的特定比例因子傳回重新縮放的圖像。大於 1 的因子會擴展圖像,介於 0 和 1 之間的因子會縮小圖像。

參數:
  • image – 要重新縮放的圖像。

  • factor – 擴展因子,為浮點數。

  • resample – 要使用的重新取樣方法。預設為 BICUBIC。請參閱 濾鏡

返回:

一個 Image 物件。

class PIL.ImageOps.SupportsGetMesh(*args, **kwargs)[原始碼]

基底:Protocol

一個支援 getmesh 方法的物件,它會將圖像作為引數,並傳回一個元組清單。每個元組都包含兩個元組,一個是來源方塊(包含 4 個整數的元組),另一個是最終四邊形(包含 8 個整數的元組),依序為左上、左下、右下、右上。

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

使圖像變形。

參數:
  • image – 要變形的影像。

  • deformer – 一個變形器物件。任何實作 getmesh 方法的物件都可以使用。

  • resample – 一個可選的重採樣濾鏡。與 PIL.Image.transform 函數中可能的值相同。

返回:

一個影像。

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

等化影像的直方圖。此函數會將非線性映射套用至輸入影像,以在輸出影像中建立灰階值的均勻分佈。

參數:
  • image – 要等化的影像。

  • mask – 一個可選的遮罩。如果給定,則分析中僅包含由遮罩選定的像素。

返回:

一個影像。

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

在影像中加入邊框

參數:
  • image – 要擴展的影像。

  • border – 邊框寬度,以像素為單位。

  • fill – 像素填充值(顏色值)。預設值為 0(黑色)。

返回:

一個影像。

PIL.ImageOps.flip(image: Image) Image[原始碼]

垂直翻轉影像(由上到下)。

參數:

image – 要翻轉的影像。

返回:

一個影像。

PIL.ImageOps.grayscale(image: Image) Image[原始碼]

將影像轉換為灰階。

參數:

image – 要轉換的影像。

返回:

一個影像。

PIL.ImageOps.invert(image: Image) Image[原始碼]

反轉(負片)影像。

參數:

image – 要反轉的影像。

返回:

一個影像。

PIL.ImageOps.mirror(image: Image) Image[原始碼]

水平翻轉影像(由左至右)。

參數:

image – 要鏡射的影像。

返回:

一個影像。

PIL.ImageOps.posterize(image: Image, bits: int) Image[原始碼]

減少每個色彩通道的位元數。

參數:
  • image – 要色調分離的影像。

  • bits – 為每個通道保留的位元數 (1-8)。

返回:

一個影像。

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

反轉超過閾值的所有像素值。

參數:
  • image – 要日光化的影像。

  • threshold – 反轉超過此灰階級別的所有像素。

返回:

一個影像。

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

如果影像具有 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[原始碼]

傳回調整大小後的影像版本,設定為要求的尺寸內的最大寬度和高度,同時保持原始的長寬比。

參數:
  • image – 要調整大小的影像。

  • size – 要求的輸出尺寸,以 (寬度, 高度) 元組的形式給定,單位為像素。

  • method – 要使用的重採樣方法。預設值為 BICUBIC。請參閱 濾鏡

返回:

一個影像。

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

傳回調整大小後的影像版本,使其覆蓋要求的尺寸,同時保持原始的長寬比。

參數:
  • 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[原始碼]

傳回調整大小並裁剪後的影像版本,裁剪為要求的長寬比和尺寸。

此函式由 Kevin Cazabon 貢獻。

參數:
  • image – 要調整大小和裁剪的影像。

  • size – 要求的輸出尺寸,以 (寬度, 高度) 元組的形式給定,單位為像素。

  • method – 要使用的重採樣方法。預設值為 BICUBIC。請參閱 濾鏡

  • bleed – 從影像的四個邊緣移除邊框。此值為小數百分比(1% 請使用 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[原始碼]

傳回調整大小並填補後的影像版本,擴展為填滿要求的長寬比和尺寸。

參數:
  • image – 要調整大小和裁剪的影像。

  • size – 要求的輸出尺寸,以 (寬度, 高度) 元組的形式給定,單位為像素。

  • method – 要使用的重採樣方法。預設值為 BICUBIC。請參閱 濾鏡

  • color – 填補影像的背景顏色。

  • centering

    控制原始影像在填補版本中的位置。

    (0.5, 0.5) 會保持影像置中 (0, 0) 會保持影像對齊左上角 (1, 1) 會保持影像對齊右下角

返回:

一個影像。