查看圖片的模式
from PIL import Image
img = Image.open('xxx.gif')
print(img.mode)
對於一般的 gif
圖片,你會得到輸出 "P"
。
其他輸出有"1-二值圖",“L-灰度圖”,“RGB-三原色”"RGBA-三原色+透明度alpha"等。
P
是什麼意思
P 可以理解爲 palettised,這是由調色盤 palette
演變而來的,上例中使用gif圖像做測試是因爲大多數的GIF格式圖片都使用調色盤。
調色盤?
調色盤存儲在圖像文件的文件頭部附近,詳細資料可以在網絡中找到。
首先用大家熟悉的RGB圖像爲例,RGB圖像是典型的不使用調色盤存儲顏色的圖像格式,所以RGB採用R,G,B三個通道,每個通道在每一個像素位置用1個字節即8個比特存儲對應通道的顏色值(0~255),譬如純紅色的一張圖,它的R通道上每一個值都是255,表示紅色的程度
最大,而另外兩個通道值爲0,表示不存在該顏色的分量。
考慮塗色盤的一個重要優點
:減少存儲空間使用量
簡單地說,調色盤是一個預設好的表
,這張表最多能存儲256中不同的調色方案
。調色方案是由RGB值定義的。
以下代碼將會打印出圖像img的調色板情況,按照256個配色方案*3個通道值的格式排列:
print(np.array(img.getpalette()).reshape(256,3))
回過頭來,使用了調色盤的圖像將會被單通道存儲,每個像素位置的值是調色盤“表”中的索引,這在存儲圖像的時候空間要求從RGB的3個字節變成了1個字節
。
當然,因爲表中有限的配色方案數量(256),能使用的顏色也是有限制的,這也是P格式圖像的一個缺點。
轉換
PIL庫提供了非常方便的函數:
img = img.convert('RGB')
執行以上語句即可完成轉換,同時,請注意賦值回原圖像變量,img.convert()
的執行不是inplace
的。
2019/12 Karl