影像檔案格式

Python 影像函式庫支援各種點陣檔案格式。函式庫可以識別並讀取 30 多種不同的檔案格式。寫入支援較少,但支援大多數常用的交換和展示格式。

open() 函數會根據檔案內容而非名稱來識別檔案,但 save() 方法會查看名稱以判斷要使用的格式,除非明確給定格式。

當從檔案開啟影像時,只有該影像的實例才會被視為具有格式。影像的副本將包含從檔案載入的資料,但不包含檔案本身,這表示它不再被視為原始格式。因此,如果在影像上呼叫 copy(),或另一個方法在內部建立影像的副本,則任何特定於該格式的方法或屬性將不再存在。fp (檔案指標) 屬性將不再存在,且 format 屬性將為 None

完全支援的格式

BLP

BLP 是 Blizzard Mipmap 格式,是《魔獸世界》中使用的材質格式。Pillow 支援讀取 JPEG 壓縮或原始 BLP1 影像,以及所有類型的 BLP2 影像。

儲存

Pillow 支援寫入 BLP 影像。save() 方法可以採用以下關鍵字引數:

blp_version

如果存在並設定為 “BLP1”,則影像將儲存為 BLP1。否則,影像將儲存為 BLP2。

BMP

Pillow 讀取和寫入包含 1LPRGB 資料的 Windows 和 OS/2 BMP 檔案。16 色影像讀取為 P 影像。Pillow 9.1.0 新增了讀取 8 位元行程長度編碼的支援。Pillow 9.3.0 新增了讀取 4 位元行程長度編碼的支援。

開啟

open() 方法設定以下 info 屬性:

compression

如果檔案是 256 色行程長度編碼影像,則設定為 1。如果檔案是 16 色行程長度編碼影像,則設定為 2。

DDS

DDS 是視訊遊戲中常用的容器材質格式,由 DirectX 原生支援。

可以讀取 DXT1 和 DXT5 像素格式,僅限於 RGBA 模式。

3.4.0 版新增: 可以在 RGB 模式中讀取 DXT3 影像,並且可以在 RGBRGBA 模式中讀取 DX10 影像。

6.0.0 版新增: 可以讀取未壓縮的 RGBA 影像。

8.3.0 版新增: 可以在 RGB 模式中開啟 BC5S 影像,並且可以讀取未壓縮的 RGB 影像。未壓縮的資料也可以儲存到影像檔案中。

9.3.0 版新增: 可以在 L 模式中開啟 ATI1 影像,並且可以在 RGB 模式中開啟 ATI2 影像。

9.4.0 版新增: 可以開啟和儲存未壓縮的 L(「亮度」)和 LA 影像。

10.1.0 版新增: 可以在 RGB 模式中讀取 BC5U,並且可以在 P 模式中讀取 8 位元色彩索引影像。

DIB

Pillow 讀取和寫入 DIB 檔案。DIB 檔案類似於 BMP 檔案,因此請參閱上面的資訊。

6.0.0 版新增。

EPS

Pillow 識別包含影像資料的 EPS 檔案,並且可以讀取包含內嵌點陣影像 (ImageData 描述符) 的檔案。如果 Ghostscript 可用,也可以讀取其他 EPS 檔案。EPS 驅動程式也可以寫入 EPS 影像。EPS 驅動程式可以讀取 LLABRGBCMYK 模式的 EPS 影像,但 Ghostscript 可能會將影像轉換為 RGB 模式,而不是保留在原始色彩空間中。EPS 驅動程式可以寫入 LRGBCMYK 模式的影像。

載入

若要使用 Ghostscript,Pillow 會搜尋 “gs” 執行檔。在 Windows 上,它也會搜尋 “gswin32c” 和 “gswin64c”。若要自訂此行為,EpsImagePlugin.gs_binary = "gswin64" 將設定要使用的執行檔名稱。EpsImagePlugin.gs_binary = False 將會防止使用 Ghostscript。

如果 Ghostscript 可用,您可以呼叫 load() 方法,並使用下列參數來影響 Ghostscript 如何渲染 EPS。

scale

影響最終點陣化影像的縮放比例。如果 EPS 建議將影像渲染為 100px x 100px,則將此參數設定為 2 會使 Ghostscript 改為渲染 200px x 200px 的影像。邊界框的相對位置會維持不變。

im = Image.open(...)
im.size  # (100,100)
im.load(scale=2)
im.size  # (200,200)
transparency

如果為 true,則會產生具有透明背景的 RGBA 影像,而不是預設的具有白色背景的 RGB 影像。

GIF

Pillow 可以讀取 GIF 檔案格式的 GIF87a 和 GIF89a 版本。除非使用了 GIF89a 的功能或已經在使用 GIF89a,否則預設情況下程式庫會以 GIF87a 格式寫入檔案。檔案會以 LZW 編碼寫入。

GIF 檔案最初會以灰階 (L) 或調色盤模式 (P) 影像讀取。在 P 影像中搜尋後續影格會將影像變更為 RGB(如果第一個影格具有透明度,則變更為 RGBA)。

P 模式的影像會變更為 RGB,因為 GIF 的每個影格可能包含其自己的個別調色盤,最多可有 256 種顏色。當新的影格放置在先前的影格上時,這些顏色可能會組合起來,超過 P 模式的 256 種顏色限制。因此,影像會轉換為 RGB 來處理此情況。

如果您也希望第一個 P 影像影格為 RGB,以便將每個 P 影格轉換為 RGBRGBA 模式,則可以使用設定。

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_ALWAYS

然而,GIF 影格並不總是包含個別調色盤。如果只有全域調色盤,則所有顏色都可以放入 P 模式中。如果您希望在這種情況下將影格保留為 P,也可以使用設定。

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY

若要還原預設行為,即在第一個影格之後,才會將 P 模式的影像轉換為 RGBRGBA

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_FIRST

開啟

open() 方法設定以下 info 屬性:

background

預設背景顏色 (調色盤顏色索引)。

transparency

透明度顏色索引。如果影像不透明,則會省略此鍵。

version

版本 ( GIF87aGIF89a)。

duration

可能不存在。顯示 GIF 目前影格的時間,以毫秒為單位。

loop

可能不存在。GIF 應該迴圈播放的次數。0 表示它將永遠迴圈播放。

comment

可能不存在。關於影像的註解。這是目前影格影像之前找到的最後一則註解。

extension

可能不存在。包含應用程式特定的資訊。

讀取序列

GIF 載入器支援 seek()tell() 方法。您可以結合這些方法來搜尋下一個影格 (im.seek(im.tell() + 1))。

如果您嘗試在最後一個影格之後搜尋,im.seek() 會引發 EOFError

儲存

當呼叫 save() 來寫入 GIF 檔案時,可以使用下列選項

im.save(out, save_all=True, append_images=[im1, im2, ...])
save_all

如果存在且為 true,則會儲存影像的所有影格。如果不存在,則只會儲存多影格影像的第一個影格。

append_images

要附加為其他影格的影像清單。清單中的每個影像可以是單影格或多影格影像。目前支援 GIF、PDF、PNG、TIFF 和 WebP。

ICO 和 ICNS 也支援此功能。如果傳入相關大小的影像,則會使用這些影像,而不是縮小主要影像。

include_color_table

是否包含本機色彩表。

interlace

影像是否為交錯式。預設情況下,除非影像的寬度或高度小於 16 像素,否則為交錯式。

disposal

指出圖形在顯示後要如何處理。

  • 0 - 未指定處置方式。

  • 1 - 請勿處置。

  • 2 - 還原為背景顏色。

  • 3 - 還原為先前的內容。

傳遞單一整數以進行常數處置,或傳遞清單或元組以分別設定每個影格的處置方式。

palette

使用指定的調色盤來儲存影像。調色盤應為包含 RGBRGB… 格式調色盤項目的 bytes 或 bytearray 物件。它不應超過 768 個位元組。或者,可以將調色盤作為 PIL.ImagePalette.ImagePalette 物件傳入。

optimize

是否嘗試透過消除未使用的顏色來壓縮調色盤 (只有在調色盤可以壓縮到下一個較小的 2 的次方元素時才有用),以及是否將下一個影格中不是新的所有像素標記為透明。

預設情況下會嘗試壓縮,除非調色盤指定為選項,或指定為第一個影像 info 字典的一部分。

請注意,如果您要儲存的影像來自現有的 GIF,則其 info 字典中可能具有下列屬性。對於這些選項,如果您未傳入它們,它們將預設為其 info 值。

transparency

透明度顏色索引。

duration

多影格 gif 每個影格的顯示持續時間,以毫秒為單位。傳遞單一整數以取得常數持續時間,或傳遞清單或元組以分別設定每個影格的持續時間。

loop

GIF 應該迴圈播放的整數次數。0 表示它將永遠迴圈播放。如果省略或為 None,則影像不會迴圈播放。

comment

關於影像的註解。

讀取本機影像

GIF 載入器會建立與 GIF 檔案的「邏輯螢幕大小」相同大小的影像記憶體,並將實際像素資料 (「本機影像」) 貼到此影像中。如果您只需要實際像素矩形,可以裁切影像

im = Image.open(...)

if im.tile[0][0] == "gif":
    # only read the first "local image" from this GIF file
    box = im.tile[0][1]
    im = im.crop(box)

ICNS

Pillow 可以讀取和寫入 macOS .icns 檔案。預設情況下,會讀取最大的可用圖示,但您可以在呼叫 load() 之前,設定 size 屬性來覆寫此設定。open() 方法會設定下列 info 屬性

注意

在 8.3.0 版之前,Pillow 只能在 macOS 上寫入 ICNS 檔案。

sizes

此圖示檔案中找到的支援大小清單;這些是 3 元組,(width, height, scale),其中 scale 對於 Retina 圖示為 2,對於標準圖示為 1。

載入

您可以使用下列參數呼叫 load() 方法。

scale

影響最終影像的縮放比例。如果大小設定為 (512, 512),在以比例 2 載入後,size 的最終值將為 (1024, 1024)

儲存

save() 方法可以採用下列關鍵字引數

append_images

要取代縮小比例的影像版本的影像清單。影像的順序並不重要,因為它們的使用是由每個影像的大小決定。

在 5.1.0 版中新增。

ICO

ICO 用於在 Windows 上儲存圖示。會讀取最大的可用圖示。

儲存

save() 方法支援下列選項

sizes

此 ico 檔案中包含的尺寸列表;這些尺寸為 2 元組,(寬度, 高度);預設值為 [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]。任何大於原始尺寸或 256 的尺寸都將被忽略。

save() 方法可以採用下列關鍵字引數

append_images

要取代縮小比例的影像版本的影像清單。影像的順序並不重要,因為它們的使用是由每個影像的大小決定。

在 8.1.0 版本中新增。

bitmap_format

預設情況下,圖像資料將以 PNG 格式儲存。若 bitmap 格式設定為「bmp」,則圖像資料會改為以 BMP 格式儲存。

在 8.3.0 版本中新增。

IM

IM 是 LabEye 和其他基於 IFUNC 圖像處理函式庫的應用程式所使用的格式。此函式庫可以讀寫此格式的大多數未壓縮交換版本。

IM 是唯一可以儲存所有 Pillow 內部格式的格式。

JPEG

Pillow 可讀取包含 LRGBCMYK 資料的 JPEG、JFIF 和 Adobe JPEG 檔案。它會寫入標準和漸進式 JFIF 檔案。

使用 draft() 方法,您可以在載入時將 RGB 圖像轉換為 L,並將圖像大小調整為原始大小的 1/2、1/4 或 1/8,以加快速度。

預設情況下,Pillow 不允許載入截斷的 JPEG 檔案,請設定 ImageFile.LOAD_TRUNCATED_IMAGES 來覆寫此設定。

開啟

open() 方法可能會設定以下 info 屬性(如果有的話)

jfif

找到 JFIF 應用程式標記。如果該檔案不是 JFIF 檔案,則此鍵不存在。

jfif_version

代表 jfif 版本 (主要版本, 次要版本) 的元組。

jfif_density

代表影像像素密度,單位由 jfif_unit 指定的元組。

jfif_unit

jfif_density 的單位

  • 0 - 無單位

  • 1 - 每英吋像素

  • 2 - 每公分像素

dpi

如果該檔案是 jfif 檔案且單位為英吋,則代表以每英吋像素回報的像素密度的元組。

adobe

找到 Adobe 應用程式標記。如果該檔案不是 Adobe JPEG 檔案,則此鍵不存在。

adobe_transform

廠商特定標籤。

progression

指示此為漸進式 JPEG 檔案。

icc_profile

影像的 ICC 色彩描述檔。

exif

影像的原始 EXIF 資料。

comment

關於影像的註解。

在 7.1.0 版本中新增。

儲存

save() 方法支援下列選項

quality

影像品質,範圍從 0 (最差) 到 95 (最佳),或字串 keep。預設值為 75。應避免使用大於 95 的值;100 會停用 JPEG 壓縮演算法的部分功能,並導致檔案過大,而影像品質幾乎沒有任何提升。值 keep 僅對 JPEG 檔案有效,且會保留原始影像品質等級、子採樣和 qtable。

optimize

如果存在且為 true,則表示編碼器應對影像進行額外掃描,以選擇最佳的編碼器設定。

progressive

如果存在且為 true,則表示此影像應儲存為漸進式 JPEG 檔案。

dpi

代表像素密度的整數元組,(x,y)

icc_profile

如果存在且為 true,則會儲存具有所提供 ICC 描述檔的影像。如果未提供此參數,則影像儲存時不會附加描述檔。若要保留現有的描述檔

im.save(filename, 'jpeg', icc_profile=im.info.get('icc_profile'))
exif

如果存在,影像將會儲存所提供的原始 EXIF 資料。

keep_rgb

預設情況下,libjpeg 會將具有 RGB 色彩空間的影像轉換為 YCbCr。如果此選項存在且為 true,則這些影像會改為儲存為 RGB。

當啟用此選項時,嘗試使用 subsampling 選項對 RGB 影像進行色彩子採樣將會引發 OSError

在 10.2.0 版本中新增。

subsampling

如果存在,則會設定編碼器的子採樣。

  • keep:僅對 JPEG 檔案有效,將保留原始影像設定。

  • 4:4:44:2:24:2:0:特定採樣值

  • 0:相當於 4:4:4

  • 1:相當於 4:2:2

  • 2:相當於 4:2:0

如果不存在,則設定將由 libjpeg 或 libjpeg-turbo 決定。

restart_marker_blocks

如果存在,則會在產生指定數量的 MCU 區塊時發出重新啟動標記。

在 10.2.0 版本中新增。

restart_marker_rows

如果存在,則會在產生指定數量的 MCU 列時發出重新啟動標記。

在 10.2.0 版本中新增。

qtables

如果存在,則會設定編碼器的 qtable。在 JPEG 文件中,這被列為精靈的高階選項。請謹慎使用。qtables 可以是以下幾種值類型之一

  • 一個字串,命名一個預設值,例如 keepweb_lowweb_high

  • 一個包含 64 個整數列表的列表、元組或字典 (整數鍵 = range(len(keys)))。必須有 2 到 4 個表格。

在 2.5.0 版本中新增。

streamtype

允許儲存沒有量化和霍夫曼表格的影像,或具有這些表格但沒有影像資料的影像。這對於容器格式或在影像之間分別處理和共享表格的網路協定很有用。

  • 0 (預設):具有表格和影像資料的交換資料串流

  • 1:縮寫表格規格 (僅限表格) 資料串流

    在 10.2.0 版本中新增。

  • 2:縮寫影像 (僅限影像) 資料串流

comment

關於影像的註解。

在 9.4.0 版本中新增。

注意

若要啟用 JPEG 支援,您需要在建置 Python Imaging Library 之前建置並安裝 IJG JPEG 函式庫。詳細資訊請參閱發行版本的 README。

JPEG 2000

在 2.4.0 版本中新增。

Pillow 可以讀取和寫入包含 LLARGBRGBAYCbCr 資料的 JPEG 2000 檔案。讀取時,YCbCr 資料會根據是否有 alpha 通道轉換為 RGBRGBA。從 8.3.0 版本開始,Pillow 可以讀取 (但不能寫入) 具有子採樣元件的 RGBRGBAYCbCr 影像。Pillow 支援 JPEG 2000 原始碼串流 (.j2k 檔案),以及已裝箱的 JPEG 2000 檔案 (.jp2.jpx 檔案)。

載入時,如果您在調用 load() 方法之前設定影像的 mode,您可以要求 Pillow 將影像轉換為 RGBRGBA,而不是讓它自行選擇。也可以將 reduce 設定為要捨棄的解析度數量(每一個都會將結果影像的大小減少 2 倍),並將 layers 設定為要載入的品質圖層數量。

儲存

save() 方法支援下列選項

offset

影像偏移量,為整數元組,例如 (16, 16)

tile_offset

圖塊偏移量,同樣為 2 元組的整數。

tile_size

圖塊大小為 2 元組。如果未指定,或設定為 None,則將會儲存沒有平舖的影像。

quality_mode

視您要用於指定影像品質的單位而定,可以是 "rates""dB"

quality_layers

一連串數字,每個數字代表近似的大小縮減 (如果品質模式為 "rates") 或以分貝為單位的訊號雜訊比值。如果未指定,則預設為單個完整品質的圖層。

num_resolutions

要儲存的不同影像解析度數量(這對應於離散小波轉換分解的數量加 1)。

codeblock_size

程式碼區塊大小為 2 元組。最小尺寸為 4 x 4,最大尺寸為 1024 x 1024,並加上額外的限制,即任何程式碼區塊的係數不得超過 4096 (亦即,兩個數字的乘積不得大於 4096)。

precinct_size

鄰域大小為 2 元組。沿兩個軸都必須是 2 的冪,且必須大於程式碼區塊大小。

irreversible

如果 True,則使用有損離散波形轉換 DWT 9-7。預設為 False,這會使用無損 DWT 5-3。

mct

如果 1,則在編碼時啟用多組件轉換;否則使用 0 表示不進行組件轉換(預設)。如果啟用 MCT 且 irreversibleTrue,則將應用不可逆色彩轉換;否則,編碼將使用可逆色彩轉換。MCT 在 modeRGB 時效果最佳,且僅適用於具有 3 個組件的圖像數據。

在 9.1.0 版本中新增。

progression

控制進程順序;必須是 "LRCP""RLCP""RPCL""PCRL""CPRL" 其中之一。這些字母分別代表組件(Component)、位置(Position)、解析度(Resolution)和層(Layer),並控制編碼順序。例如,使用 LRCP 模式編碼的圖像可以在解碼器接收到時解碼其品質層,而使用 RLCP 模式編碼的圖像則會在接收到時解碼其解析度,依此類推。

signed (有符號)

如果為 true,則告知編碼器將圖像另存為有符號。

在 9.4.0 版本中新增。

cinema_mode (電影模式)

設定編碼器以產生符合數位電影規格的輸出。此處的選項有 "no"(預設)、用於 24fps 2K 的 "cinema2k-24"、用於 48fps 2K 的 "cinema2k-48",以及用於 24fps 4K 的 "cinema4k-24"。請注意,對於符合規範的 2K 檔案,您的圖像尺寸中至少一個必須符合 2048 x 1080;對於符合規範的 4K 檔案,則至少一個尺寸必須符合 4096 x 2160。

no_jp2

如果為 True,則在儲存時不要將原始碼流包裝在 JP2 檔案格式中;否則,將使用檔案名稱的副檔名來決定格式(預設)。

在 9.1.0 版本中新增。

comment

向檔案新增自訂註解,取代預設的「Created by OpenJPEG version」註解。

在 9.5.0 版本中新增。

plt

如果 True 且可以使用 OpenJPEG 2.4.0 或更高版本,則在產生的檔案中包含 PLT(封包長度、圖塊部分標頭)標記。預設為 False

在 9.5.0 版本中新增。

注意

若要啟用 JPEG 2000 支援,您需要在建置 Python Imaging Library 之前,先建置並安裝 OpenJPEG 函式庫 2.0.0 或更高版本。

Windows 使用者可以安裝 OpenJPEG 網站上提供的 OpenJPEG 二進制檔,但必須將它們新增到 PATH 中才能使用 Pillow(如果未能執行此操作,您會收到無法載入 _imaging DLL 的錯誤)。

MSP

Pillow 可以識別並讀取來自 Windows 1 和 2 的 MSP 檔案。該函式庫會寫入此格式的未壓縮(Windows 1)版本。

PCX

Pillow 可以讀取和寫入包含 1LPRGB 資料的 PCX 檔案。

PFM

在 10.3.0 版本中新增。

Pillow 可以讀取和寫入包含 F 資料的灰階 (Pf 格式) 可攜式浮點映射 (PFM) 檔案。

不支援色彩 (PF 格式) PFM 檔案。

開啟

open() 函式會設定以下 info 屬性:

scale

儲存在比例因子 / 位元組順序行中的數字的絕對值。

PNG

Pillow 可以識別、讀取和寫入包含 1LLAIPRGBRGBA 資料的 PNG 檔案。從 v1.1.7 開始支援交錯檔案。

從 Pillow 6.0 開始,可以從 PNG 圖像讀取 EXIF 資料。但是,與其他圖像格式不同,在呼叫 load() 之前,不能保證 info 中會存在 EXIF 資料。

預設情況下,Pillow 不允許載入截斷的 PNG 檔案,請設定 ImageFile.LOAD_TRUNCATED_IMAGES 來覆寫此行為。

開啟

當適當的時候,open() 函式會設定以下 info 屬性:

chromaticity (色度)

色度點,以 8 個浮點數的元組形式表示。(白點 X白點 Y紅點 X紅點 Y綠點 X綠點 Y藍點 X藍點 Y

gamma (伽瑪)

伽瑪,以浮點數形式給出。

srgb

sRGB 彩現意圖,以整數表示。

  • 0 感知

  • 1 相對色度

  • 2 飽和度

  • 3 絕對色度

transparency

對於 P 圖像:全透明像素的調色板索引,或每個調色板項目的 alpha 值位元組字串。

對於 1LIRGB 圖像,代表此圖像中全透明像素的顏色。

如果圖像不是透明調色板圖像,則會省略此鍵。

open 還會將 Image.text 設定為 PNG 圖像的 tEXtzTXtiTXt 區塊的值的字典。為了防止解壓縮炸彈,個別壓縮區塊的解壓縮大小限制為 PngImagePlugin.MAX_TEXT_CHUNK,預設為 1MB。此外,所有文字區塊的總大小限制為 PngImagePlugin.MAX_TEXT_MEMORY,預設為 64MB。

儲存

save() 方法支援下列選項

optimize

如果存在且為 true,則指示 PNG 寫入器使輸出檔案盡可能小。這包括額外的處理,以尋找最佳編碼器設定。

transparency

對於 P1LIRGB 圖像,此選項控制要將圖像中的哪種顏色標記為透明。

對於 P 圖像,可以是調色板索引,也可以是每個調色板項目的 alpha 值位元組字串。

dpi

一個包含兩個數字的元組,對應於每個方向上所需的 dpi。

pnginfo

一個包含區塊的 PIL.PngImagePlugin.PngInfo 實例。

compress_level (壓縮等級)

ZLIB 壓縮等級,一個介於 0 到 9 之間的數字:1 提供最佳速度,9 提供最佳壓縮,0 表示完全不壓縮。預設值為 6。當 optimize 選項為 True 時,compress_level 無效(無論傳遞的值為何,都會設定為 9)。

icc_profile

要包含在儲存檔案中的 ICC 配置文件。

exif

要包含在儲存檔案中的 exif 資料。

6.0.0 版新增。

bits (位元)(實驗性)

對於 P 影像,此選項控制儲存多少位元。若省略,PNG 寫入器會使用 8 位元(256 種顏色)。

字典(實驗性)

設定 ZLIB 編碼器的字典。

注意

要啟用 PNG 支援,您需要在建置 Python Imaging Library 之前建置並安裝 ZLIB 壓縮函式庫。詳細資訊請參閱安裝文件

APNG 序列

PNG 載入器包含讀取和寫入動畫可攜式網路圖形(APNG)檔案的有限支援。當載入 APNG 檔案時,get_format_mimetype() 將會回傳 "image/apng"is_animated 屬性的值,當 n_frames 屬性大於 1 時,將會是 True。對於 APNG 檔案,n_frames 屬性取決於動畫影格計數以及是否存在預設影像。請參閱下方 default_image 屬性文件以取得更多詳細資訊。seek()tell() 方法均支援。

如果您嘗試在最後一個影格之後搜尋,im.seek() 會引發 EOFError

這些 info 屬性將會針對 APNG 影格設定,若適用。

default_image

指定此 APNG 檔案是否包含單獨的預設影像,而該預設影像不是實際 APNG 動畫的一部分。

當 APNG 檔案包含預設影像時,最初載入的影像(即 seek(0) 的結果)將是預設影像。為了考量預設影像的存在,n_frames 屬性將會設定為 frame_count + 1,其中 frame_count 是實際的 APNG 動畫影格計數。若要載入第一個 APNG 動畫影格,則必須呼叫 seek(1)

  • True - APNG 包含預設影像,該影像不是動畫影格。

  • False - APNG 不包含預設影像。n_frames 屬性將設定為實際的 APNG 動畫影格計數。最初載入的影像(即 seek(0))將會是第一個 APNG 動畫影格。

loop

此 APNG 循環播放的次數,0 表示無限循環。

duration

顯示此 APNG 影格的時間(以毫秒為單位)。

注意

APNG 載入器會傳回與 APNG 檔案的邏輯螢幕大小相同的影像。傳回的影像包含特定影格的像素資料,在套用任何 APNG 影格處置和影格混合操作之後(即包含網頁瀏覽器會針對此影格呈現的內容 - 所有先前影格和此影格的組合)。

任何包含序列錯誤的 APNG 檔案都會被視為無效影像。APNG 載入器不會嘗試修復和重新排序包含序列錯誤的檔案。

儲存

當呼叫 save() 時,預設只會儲存單一影格 PNG 檔案。若要儲存 APNG 檔案(包含單一影格 APNG),必須將 save_all 參數設定為 True。還可以設定下列參數

default_image

布林值,指定基本影像是否為預設影像。若為 True,則基本影像將會用作預設影像,並且來自 append_images 序列的第一個影像將會是第一個 APNG 動畫影格。若為 False,則基本影像將會用作第一個 APNG 動畫影格。預設值為 False

append_images

要附加為額外影格的影像清單或元組。清單中的每個影像都可以是單一或多影格影像。每個影格的大小應與基本影像的大小相符。另請注意,如果影格的模式與基本影像的模式不符,則該影格將會轉換為基本影像模式。

loop

此 APNG 循環播放的整數次數,0 表示無限循環。預設值為 0。

duration

顯示此 APNG 影格的整數(或整數清單或元組)時間長度(以毫秒為單位)。預設值為 0。

disposal

一個整數(或整數清單或元組),指定在呈現下一個影格之前,要用於此影格的 APNG 處置操作。預設值為 0。

  • 0(OP_NONE,預設)- 在呈現下一個影格之前,不會對此影格進行處置。

  • 1(PIL.PngImagePlugin.Disposal.OP_BACKGROUND)- 在呈現下一個影格之前,此影格的修改區域會清除為完全透明的黑色。

  • 2(OP_PREVIOUS)- 在呈現下一個影格之前,此影格的修改區域會還原為前一個影格的內容。

blend

一個整數(或整數清單或元組),指定在呈現下一個影格之前,要用於此影格的 APNG 混合操作。預設值為 0。

  • 0(OP_SOURCE)- 此影格的所有顏色組件(包括 Alpha)都會覆寫先前的輸出影像內容。

  • 1(OP_OVER)- 此影格應與先前的輸出影像內容進行 Alpha 合成。

注意

durationdisposalblend 參數可以設定為清單或元組,以指定動畫中每個個別影格的值。清單或元組的長度必須與 APNG 動畫中實際影格的總數相同。如果 APNG 包含預設影像(即 default_image 設定為 True),則這些清單或元組參數不應包含預設影像的條目。

PPM

Pillow 會讀取和寫入包含 1LIRGB 資料的 PBM、PGM、PPM 和 PNM 檔案。

可以讀取「原始」(P4 至 P6)格式,並在寫入時使用。

自 Pillow 9.2.0 起,也可以讀取「純文字」(P1 至 P3)格式。

SGI

Pillow 會讀取和寫入未壓縮的 LRGBRGBA 檔案。

SPIDER

Pillow 會讀取和寫入 32 位元浮點資料(「F;32F」)的 SPIDER 影像檔案。

Pillow 也會讀取包含 SPIDER 影像序列的 SPIDER 堆疊檔案。支援 seek()tell() 方法,並允許隨機存取。

開啟

open() 方法會設定下列屬性

format

設定為 SPIDER

istack

如果檔案是影像堆疊,則設定為 1,否則設定為 0。

n_frames

設定為堆疊中的影像數量。

提供了一個方便的方法,convert2byte(),用於將浮點資料轉換為位元組資料(模式 L

im = Image.open("image001.spi").convert2byte()

儲存

SPIDER 檔案的副檔名可以是任何 3 個字母數字字元。因此,必須明確指定輸出格式

im.save('newimage.spi', format='SPIDER')

有關 SPIDER 影像處理套件的更多資訊,請參閱 https://github.com/spider-em/SPIDER

TGA

Pillow 會讀取和寫入包含 LLAPRGBRGBA 資料的 TGA 影像。Pillow 可以讀取和寫入未壓縮和執行長度編碼的 TGA。

儲存

save() 方法可以採用下列關鍵字引數

compression

如果設定為「tga_rle」,檔案將會以執行長度編碼。

在 5.3.0 版本中新增。

id_section

識別欄位。

在 5.3.0 版本中新增。

orientation

如果存在且為正數,則第一個像素位於左上角,而不是左下角。

在 5.3.0 版本中新增。

TIFF

Pillow 可以讀取和寫入 TIFF 檔案。它能夠讀取條紋式和分塊式影像,以及像素和平面交錯的多頻帶影像。如果您已安裝 libtiff 及其標頭檔,Pillow 可以讀取和寫入多種壓縮的 TIFF 檔案。否則,Pillow 將只能讀取和寫入未壓縮的檔案。

注意

從 5.0.0 版本開始,Pillow 需要 libtiff 才能讀取或寫入壓縮的檔案。在該版本之前,Pillow 在不使用 libtiff 的情況下,對讀取 Packbits、LZW 和 JPEG 壓縮的 TIFF 檔案的支援存在錯誤。

開啟

open() 方法設定以下 info 屬性:

compression

壓縮模式。

於 2.0.0 版本新增。

dpi

影像解析度,以 (xdpi, ydpi) 元組表示(如適用)。您可以使用 tag 屬性來取得有關影像解析度的更多詳細資訊。

於 1.1.5 版本新增。

解析度

影像解析度,以 (xres, yres) 元組表示(如適用)。這是以檔案指定的單位進行測量的。

於 1.1.5 版本新增。

tag_v2 屬性包含 TIFF 元數據的字典。鍵是來自 TiffTags.TAGS_V2 的數字索引。對於單個項目,值為字串或數字,多個值則以值元組形式返回。有理數將以 IFDRational 物件返回。

於 3.0.0 版本新增。

為了與舊版程式碼相容,tag 屬性包含 3.0.0 版本之前返回的已解碼 TIFF 欄位的字典。值會以字串或數值元組的形式返回。有理數會以 (分子, 分母) 的元組形式返回。

自 3.0.0 版本起已棄用。

讀取多幀 TIFF 影像

TIFF 加載器支援 seek()tell() 方法,它們在影像檔案中取得和返回幀號。您可以結合這些方法來尋找下一幀(im.seek(im.tell() + 1))。幀的編號從 0 到 im.n_frames - 1,並且可以按任何順序存取。

如果您嘗試在最後一個影格之後搜尋,im.seek() 會引發 EOFError

儲存

save() 方法可以採用下列關鍵字引數

save_all

如果為 true,Pillow 會將影像的所有幀儲存到多幀 tiff 文件中。

於 3.4.0 版本新增。

append_images

要附加為額外幀的影像列表。列表中的每個影像可以是單幀或多幀影像。但是請注意,為了獲得正確的結果,所有附加的影像都應該具有相同的 encoderinfoencoderconfig 屬性。

於 4.2.0 版本新增。

tiffinfo

一個 ImageFileDirectory_v2 物件或字典物件,其中包含 tiff 標籤和值。會自動偵測數字和字串值的 TIFF 欄位類型,任何其他類型都需要使用 ImageFileDirectory_v2 物件,並使用來自 TiffTags.TYPES 的適當數值設定 tagtype 中的類型。

於 2.3.0 版本新增。

有理類型的元數據值應使用 IFDRational 物件傳遞。

於 3.1.0 版本新增。

為了與舊版程式碼相容,可以在此欄位中傳遞 ImageFileDirectory_v1 物件。然而,這已被棄用。

於 5.4.0 版本新增。

先前的版本僅在使用 libtiff 寫入時支援某些標籤。支援的列表位於 TiffTags.LIBTIFF_CORE 中。

於 6.1.0 版本新增。

新增對帶符號類型(例如 TIFF_SIGNED_LONG)和多個值的支援。單個標籤的多個值必須以元組的形式傳遞給 ImageFileDirectory_v2,並且需要在 tagtype 中使用相符的類型。

exif

與其他格式保持一致的 “tiffinfo” 的替代關鍵字。

於 8.4.0 版本新增。

compression

一個字串,其中包含檔案所需的壓縮方法。(僅在安裝 libtiff 的情況下有效)有效的壓縮方法為:None"group3""group4""jpeg""lzma""packbits""tiff_adobe_deflate""tiff_ccitt""tiff_lzw""tiff_raw_16""tiff_sgilog""tiff_sgilog24""tiff_thunderscan""webp""zstd"

quality

JPEG 壓縮的影像品質,範圍從 0(最差)到 100(最佳)。預設值為 75。

於 6.1.0 版本新增。

這些設定 tiff 標頭欄位的引數是使用 tiffinfo 可用的一般標籤的替代方案。

描述

軟體

日期時間

作者

版權

字串

icc_profile

要包含在儲存檔案中的 ICC 配置文件。

解析度單位

一個整數。1 表示無單位,2 表示英寸,3 表示公分。

解析度

整數或浮點數,用於 x 和 y 解析度。

x_resolution

整數或浮點數。

y_resolution

整數或浮點數。

dpi

一個 (x_resolution, y_resolution) 元組,以英寸作為解析度單位。為了與其他影像格式保持一致,dpi 的 x 和 y 解析度將四捨五入為最接近的整數。

WebP

Pillow 可以讀取和寫入 WebP 檔案。需要 libwebp v0.5.0 或更高版本。

儲存

save() 方法支援下列選項

無損

如果存在且為 true,則指示 WebP 寫入器使用無損壓縮。

quality

整數,0-100,預設為 80。對於有損壓縮,0 給出最小的大小,100 給出最大的大小。對於無損壓縮,此參數是壓縮所付出的努力量:0 是最快的,但與最慢但最好的 100 相比,產生更大的檔案。

alpha_quality

整數,0-100,預設為 100。僅適用於有損壓縮。0 給出最小的大小,100 為無損。

方法

品質/速度權衡 (0=快,6=較慢但更好)。預設值為 4。

精確

如果為 true,則保留透明的 RGB 值。否則,捨棄不可見的 RGB 值以獲得更好的壓縮效果。預設值為 false。

icc_profile

要包含在儲存檔案中的 ICC 配置文件。

exif

要包含在儲存檔案中的 exif 資料。

xmp

要包含在已儲存檔案中的 XMP 數據。

儲存序列

當呼叫 save() 來寫入 WebP 檔案時,預設只會儲存多幀影像的第一幀。如果存在 save_all 引數且為 true,則會儲存所有幀,並且還會提供以下選項。

append_images

要附加為額外幀的影像列表。列表中的每個影像可以是單幀或多幀影像。

duration

每幀的顯示持續時間,以毫秒為單位。傳遞單個整數表示固定的持續時間,或傳遞列表或元組來單獨設定每幀的持續時間。

loop

重複動畫的次數。預設值為 [0 = 無限]。

background

畫布的背景顏色,為 RGBA 元組,值在 (0-255) 範圍內。

minimize_size

如果為 true,則最小化輸出大小(較慢)。隱式禁用關鍵幀插入。

kmin、kmax

輸出中連續關鍵幀之間的最小和最大距離。該函式庫可能會根據需要插入一些關鍵幀以滿足此條件。請注意,這些條件應成立:kmax > kmin 且 kmin >= kmax / 2 + 1。此外,如果 kmax <= 0,則會禁用關鍵幀插入;如果 kmax == 1,則所有幀都會是關鍵幀(對於這些特殊情況,kmin 值並不重要)。

allow_mixed

如果為 true,則使用混合壓縮模式;編碼器會啟發式地為每一幀選擇有損壓縮或無損壓縮。

XBM

Pillow 可以讀取和寫入 X bitmap 檔案 (模式 1)。

唯讀格式

CUR

CUR 用於在 Windows 上儲存游標。CUR 解碼器會讀取可用的最大游標。不支援動畫游標。

DCX

DCX 是由 Intel 定義的 PCX 檔案容器格式。DCX 格式常用於傳真應用程式。DCX 解碼器可以讀取包含 1LPRGB 資料的檔案。

當檔案開啟時,只會讀取第一張影像。您可以使用 seek()ImageSequence 來讀取其他影像。

FITS

在 9.1.0 版本中新增。

Pillow 可以識別和讀取 FITS 檔案,通常用於天文學。可以讀取未壓縮和 GZIP_1 壓縮的影像。

FLI, FLC

Pillow 可以讀取 Autodesk FLI 和 FLC 動畫。

open() 方法設定以下 info 屬性:

duration

每個影格之間的延遲時間(以毫秒為單位)。

FPX

Pillow 可以讀取 Kodak FlashPix 檔案。只會從檔案讀取最高解析度的影像,且不會考慮檢視轉換。

若要啟用 FPX 支援,您必須安裝 olefile

注意

若要啟用完整的 FlashPix 支援,您需要在建置 Python Imaging Library 之前建置並安裝 IJG JPEG 函式庫。請參閱發行版的 README 以取得詳細資訊。

FTEX

於 3.2.0 版本新增。

FTEX 解碼器會讀取用於《獨立戰爭 2:混沌邊緣》中 3D 物件的材質。外掛程式會讀取每個檔案中的單個材質,並使用壓縮和未壓縮格式。

GBR

GBR 解碼器會讀取 GIMP 筆刷檔案,版本 1 和 2。

開啟

open() 方法設定以下 info 屬性:

comment

筆刷名稱。

間距

筆刷之間的間距,以像素為單位。僅限版本 2。

GD

Pillow 可以讀取未壓縮的 GD2 檔案。請注意,您必須使用 PIL.GdImageFile.open() 來讀取此類檔案。

開啟

open() 方法設定以下 info 屬性:

transparency

透明度顏色索引。如果影像不透明,則會省略此鍵。

IMT

Pillow 可以讀取包含 L 資料的 Image Tools 影像。

IPTC/NAA

Pillow 為 IPTC/NAA 新聞照片檔案提供有限的讀取支援。

MCIDAS

Pillow 可以識別和讀取 8 位元的 McIdas 區域檔案。

MIC

Pillow 可以識別和讀取 Microsoft Image Composer (MIC) 檔案。開啟時,會載入檔案中的第一個 sprite。您可以使用 seek()tell() 來讀取檔案中的其他 sprite。

請注意,MIC 檔案中可能嵌入了 2.2 的伽瑪值。

若要啟用 MIC 支援,您必須安裝 olefile

MPO

Pillow 可以識別和讀取多圖片物件 (MPO) 檔案,並在首次開啟時載入主要影像。可以使用 seek()tell() 方法來讀取檔案中的其他圖片。圖片以零為索引,並支援隨機存取。

儲存

當呼叫 save() 來寫入 MPO 檔案時,預設只會儲存多影格影像的第一個影格。如果存在 save_all 引數且為 true,則會儲存所有影格,並且也會提供以下選項。

append_images

要附加為其他圖片的影像清單。清單中的每個影像可以是單個或多個影格的影像。

於 9.3.0 版本新增。

PCD

Pillow 可以讀取包含 RGB 資料的 PhotoCD 檔案。這只會從檔案讀取 768x512 解析度的影像。較高的解析度使用專有編碼進行編碼。

PIXAR

Pillow 為 PIXAR 點陣檔案提供有限的支援。該函式庫可以識別和讀取「傾印」的 RGB 檔案。

格式代碼為 PIXAR

PSD

Pillow 可以識別和讀取 Adobe Photoshop 2.5 和 3.0 寫入的 PSD 檔案。

QOI

在 9.5.0 版本中新增。

Pillow 使用 Python 解碼器讀取 Quite OK Image 格式的影像。如果您希望專門為此格式編寫程式碼,qoi 是一個使用 C 來解碼影像並與 NumPy 介接的替代函式庫。

SUN

Pillow 可以識別和讀取 Sun 點陣檔案。

WAL

於 1.1.4 版本新增。

Pillow 可以讀取 Quake2 WAL 材質檔案。

請注意,此檔案格式無法自動識別,因此您必須使用 WalImageFile 模組中的 open 函式來讀取此格式的檔案。

預設情況下,Quake2 標準調色盤會附加到材質。若要覆寫調色盤,請使用 PIL.Image.Image.putpalette() 方法。

WMF, EMF

Pillow 可以識別 WMF 和 EMF 檔案。

在 Windows 上,它可以讀取 WMF 和 EMF 檔案。預設情況下,它會以 72 dpi 載入影像。若要以其他解析度載入

from PIL import Image

with Image.open("drawing.wmf") as im:
    im.load(dpi=144)

若要新增其他讀取或寫入支援,請使用 PIL.WmfImagePlugin.register_handler() 來註冊 WMF 和 EMF 處理常式。

from typing import IO

from PIL import Image, ImageFile
from PIL import WmfImagePlugin


class WmfHandler(ImageFile.StubHandler):
    def open(self, im: ImageFile.StubImageFile) -> None:
        ...

    def load(self, im: ImageFile.StubImageFile) -> Image.Image:
        ...
        return image

    def save(self, im: Image.Image, fp: IO[bytes], filename: str) -> None:
        ...


wmf_handler = WmfHandler()

WmfImagePlugin.register_handler(wmf_handler)

im = Image.open("sample.wmf")

XPM

Pillow 可以讀取具有 256 種顏色或更少的 X 像素圖檔案(模式 P)。

開啟

open() 方法設定以下 info 屬性:

transparency

透明度顏色索引。如果影像不透明,則會省略此鍵。

唯寫格式

PALM

Pillow 為 PALM 像素圖檔案提供唯寫支援。

格式代碼為 Palm,副檔名為 .palm

PDF

Pillow 可以寫入 PDF (Acrobat) 影像。此類影像會以二進位 PDF 1.4 檔案格式寫入。根據影像模式使用不同的編碼方法。

  • 1 模式影像會使用 TIFF 編碼儲存,如果 libtiff 支援不可用,則使用 JPEG 編碼

  • L、RGB 和 CMYK 模式影像使用 JPEG 編碼

  • P 模式影像使用 HEX 編碼

  • LA 和 RGBA 模式影像使用 JPEG2000 編碼

儲存

save() 方法可以採用下列關鍵字引數

save_all

如果使用多影格影像,預設情況下只會儲存第一個影像。若要儲存所有影格,請將每個影格儲存到 PDF 的單獨頁面,則必須存在 save_all 參數並設定為 True

於 3.0.0 版本新增。

append_images

要附加為其他頁面的 PIL.Image.Image 物件清單。清單中的每個影像可以是單個或多個影格的影像。必須存在 save_all 參數,並將其設定為 True,並與 append_images 結合使用。

於 4.2.0 版本新增。

附加

設定為 True 可將頁面附加到現有的 PDF 檔案。如果檔案不存在,則會引發 OSError

在 5.1.0 版中新增。

解析度

影像解析度,以 DPI 為單位。這與影像中的像素數量一起,將決定要儲存在 PDF 中的頁面實際尺寸。

dpi

一個 (x_resolution, y_resolution) 的元組,解析度單位為英吋。如果同時存在 resolution 參數和 dpi 參數,則會忽略 resolution

標題

文件的標題。如果未附加到現有的 PDF 檔案,則預設值為檔案名稱。

在 5.1.0 版中新增。

作者

建立文件的人員姓名。

在 5.1.0 版中新增。

主旨

文件的主旨。

在 5.1.0 版中新增。

關鍵字

與文件相關聯的關鍵字。

在 5.1.0 版中新增。

建立者

如果文件是從其他格式轉換為 PDF 的,則此處為建立原始文件的產品名稱,該原始文件後續被轉換為 PDF。

在 5.1.0 版中新增。

產生者 (producer)

如果文件是從其他格式轉換為 PDF 的,則此處為將其轉換為 PDF 的產品名稱。

在 5.1.0 版中新增。

建立日期 (creationDate)

文件的建立日期。如果不是附加到現有的 PDF 文件,則預設為目前時間。

在 5.3.0 版本中新增。

修改日期 (modDate)

文件的修改日期。如果不是附加到現有的 PDF 文件,則預設為目前時間。

在 5.3.0 版本中新增。

XV 縮圖

Pillow 可以讀取 XV 縮圖檔案。

僅識別格式

BUFR

在 1.1.3 版本中新增。

Pillow 為 BUFR 檔案提供了一個存根驅動程式。

若要為您的應用程式新增讀取或寫入支援,請使用 PIL.BufrStubImagePlugin.register_handler()

GRIB

於 1.1.5 版本新增。

Pillow 為 GRIB 檔案提供了一個存根驅動程式。

此驅動程式要求檔案以 GRIB 標頭開始。如果您的檔案包含嵌入的 GRIB 資料,或包含多個 GRIB 欄位,您的應用程式必須先搜尋到標頭,然後再將檔案控制代碼傳遞給 Pillow。

若要為您的應用程式新增讀取或寫入支援,請使用 PIL.GribStubImagePlugin.register_handler()

HDF5

於 1.1.5 版本新增。

Pillow 為 HDF5 檔案提供了一個存根驅動程式。

若要為您的應用程式新增讀取或寫入支援,請使用 PIL.Hdf5StubImagePlugin.register_handler()

MPEG

Pillow 可以識別 MPEG 檔案。