PIL mode
9種唱矛,分別為1,L井辜,P绎谦,RGB,RGBA粥脚,CMYK窃肠,YCbCr,I刷允,F(xiàn)冤留。
- 模式“1”為二值圖像,非黑即白树灶。但是它每個像素用8個bit表示纤怒,0表示黑,255表示白天通。
- 模式L”為灰色圖像泊窘,它的每個像素用8個bit表示,0表示黑土砂,255表示白州既,其他數(shù)字表示不同的灰度。在PIL中萝映,從模式“RGB”轉(zhuǎn)換為“L”模式是按照下面的公式轉(zhuǎn)換的
L = R * 299/1000 + G * 587/1000+ B * 114/1000 - 模式“P”為8位彩色圖像吴叶,它的每個像素用8個bit表示,其對應(yīng)的彩色值是按照調(diào)色板查詢出來的序臂。
- 模式“RGBA”為32位彩色圖像蚌卤,它的每個像素用32個bit表示实束,其中24bit表示紅色、綠色和藍色三個通道逊彭,另外8bit表示alpha通道咸灿,即透明通道。
- 模式“CMYK”為32位彩色圖像侮叮,它的每個像素用32個bit表示避矢。模式“CMYK”就是印刷四分色模式,它是彩色印刷時采用的一種套色模式囊榜,利用色料的三原色混色原理审胸,加上黑色油墨,共計四種顏色混合疊加卸勺,形成所謂“全彩印刷”砂沛。
四種標準顏色是:C:Cyan = 青色,又稱為‘天藍色’或是‘湛藍’M:Magenta = 品紅色曙求,又稱為‘洋紅色’碍庵;Y:Yellow = 黃色;K:Key Plate(blacK) = 定位套版色(黑色)悟狱。PIL中“RGB”轉(zhuǎn)換為“CMYK”的公式如下:
C = 255 - R
M = 255 - G
Y = 255 - B
K = 0 - 模式“YCbCr”為24位彩色圖像静浴,它的每個像素用24個bit表示。YCbCr其中Y是指亮度分量芽淡,Cb指藍色色度分量马绝,而Cr指紅色色度分量。人的肉眼對視頻的Y分量更敏感挣菲,因此在通過對色度分量進行子采樣來減少色度分量后富稻,肉眼將察覺不到的圖像質(zhì)量的變化。
模式“RGB”轉(zhuǎn)換為“YCbCr”的公式如下:
Y= 0.257R+0.504G+0.098B+16
Cb = -0.148R-0.291G+0.439B+128
Cr = 0.439R-0.368G-0.071*B+128 - 模式“I”為32位整型灰色圖像白胀,它的每個像素用32個bit表示椭赋,0表示黑,255表示白或杠,(0,255)之間的數(shù)字表示不同的灰度哪怔。在PIL中,從模式“RGB”轉(zhuǎn)換為“I”模式是按照下面的公式轉(zhuǎn)換的:
I = R * 299/1000 + G * 587/1000 + B * 114/1000 - 模式“F”為32位浮點灰色圖像向抢,它的每個像素用32個bit表示认境,0表示黑,255表示白挟鸠,(0,255)之間的數(shù)字表示不同的灰度叉信。在PIL中,從模式“RGB”轉(zhuǎn)換為“F”模式是按照下面的公式轉(zhuǎn)換的:
F = R * 299/1000+ G * 587/1000 + B * 114/1000
模式“F”與模式“L”的轉(zhuǎn)換公式是一樣的艘希,都是RGB轉(zhuǎn)換為灰色值的公式硼身,但模式“F”會保留小數(shù)部分. - 模式“RGB”為24位彩色圖像硅急,它的每個像素用24個bit表示,分別表示紅色佳遂、綠色和藍色三個通道营袜。
在PIL中,對于彩色圖像丑罪,open后都會轉(zhuǎn)換為“RGB”模式荚板,然后該模式可以轉(zhuǎn)換為其他模式,比如“1”吩屹、“L”啸驯、“P”和“RGBA”,這幾種模式也可以轉(zhuǎn)換為“RGB”模式祟峦。
圖片打開后的mode
對于彩色圖像,不管其圖像格式是PNG徙鱼,還是BMP宅楞,或者JPG,在PIL中,使用Image模塊的open()函數(shù)打開后,返回的圖像對象的模式都是“RGB”窒悔。而對于灰度圖像娘纷,不管其圖像格式是PNG,還是BMP龙考,或者JPG,打開后,其模式為“L”喻杈。
代碼示例
from PIL import Image
#新建圖片,填充pixel狰晚,保存
newIm = Image.new ("RGBA", (width,heigth))
newIm.putpixel((col,row),(red, green, blue))
newIm.save(img_name,"PNG")
#打開圖片筒饰,讀取某一個通道的像素
img=Image.open(train_name)
#如果是RGB三通道的圖片
img=img.convert('RGB')
#分裂三個通道,r,g,b現(xiàn)在都是mode為‘L’的單通道圖片對象壁晒。
r=img.split()[0]
g=img.split()[1]
b=img.split()[2]
#讀取像素
print r.getpixel((0,0))
#透明通道瓷们,隱藏信息,制造多通道圖片
info=Image.open(hidden_img)
if img.mode != "RGBA":
img = img.convert("RGBA")
if info.mode != "L" and info.mode != "1":
info = info.convert("L")
img.putalpha(info)
#此時可以查看img第四個通道里的像素
print img.split()[3].getpixel((0,0))