概念¶
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
(L 與 Alpha)
PA
(P 與 Alpha)
RGBX
(具有填補的真彩色)
RGBa
(具有預乘 Alpha 的真彩色)
La
(L 與預乘 Alpha)
I;16
(16 位元無符號整數像素)
I;16L
(16 位元小端無符號整數像素)
I;16B
(16 位元大端無符號整數像素)
I;16N
(16 位元原生端無符號整數像素)
預乘 Alpha 是指每個其他通道的值都已乘以 Alpha 值。例如,RGBA 像素 (10, 20, 30, 127)
將會轉換為 RGBa 像素 (5, 10, 15, 127)
。R、G 和 B 通道的值會因 Alpha 通道中的半透明度而減半。
除了這些其他模式之外,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 影像庫提供了不同的重新取樣濾鏡。
- 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 中新增。
濾鏡比較表¶
濾鏡 |
縮小品質 |
放大品質 |
效能 |
---|---|---|---|
⭐⭐⭐⭐⭐ |
|||
⭐ |
⭐⭐⭐⭐ |
||
⭐ |
⭐ |
⭐⭐⭐ |
|
⭐⭐ |
⭐⭐⭐ |
||
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
|
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐ |