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
,則會使用三色對應。black
和white
引數應為 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 [原始碼]¶
從圖像移除邊框。從所有四個邊移除相同數量的像素。此函式適用於所有圖像模式。
另請參閱
- 參數:
image – 要裁剪的圖像。
border – 要移除的像素數。
- 返回:
一個影像。
- PIL.ImageOps.scale(image: Image, factor: float, resample: int = Resampling.BICUBIC) Image [原始碼]¶
依據參數中指定的特定比例因子傳回重新縮放的圖像。大於 1 的因子會擴展圖像,介於 0 和 1 之間的因子會縮小圖像。
- 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.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")
給定大小 |
|
|
|
|
|
產生的影像 |
![]() |
![]() |
![]() |
![]() |
![]() |
產生的尺寸 |
|
|
|
|
|
- PIL.ImageOps.contain(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC) Image [原始碼]¶
傳回調整大小後的影像版本,設定為要求的尺寸內的最大寬度和高度,同時保持原始的長寬比。
- PIL.ImageOps.cover(image: Image, size: tuple[int, int], method: int = Resampling.BICUBIC) Image [原始碼]¶
傳回調整大小後的影像版本,使其覆蓋要求的尺寸,同時保持原始的長寬比。
- 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 – 要求的輸出尺寸,以 (寬度, 高度) 元組的形式給定,單位為像素。
bleed – 從影像的四個邊緣移除邊框。此值為小數百分比(1% 請使用 0.01)。預設值為 0(無邊框)。不能大於或等於 0.5。
centering – 控制裁剪位置。使用 (0.5, 0.5) 進行置中裁剪(例如,如果裁剪寬度,則從左側移除 50%,因此從右側移除 50%)。(0.0, 0.0) 會從左上角裁剪(即,如果裁剪寬度,則從右側移除所有裁剪,如果裁剪高度,則從底部移除所有裁剪)。(1.0, 0.0) 會從左下角裁剪,依此類推。(即,如果裁剪寬度,則從左側移除所有裁剪,如果裁剪高度,則不從頂部移除任何裁剪,因此全部從底部移除)。
- 返回:
一個影像。