在本地找了jpg的圖,convert為不同mode,將不同的圖截取做了個腦圖,有個直觀的感覺吧。
把不同mode的圖通過np.array()轉化為array, 打印出array的shape, 和array[0, 0]的值, 便於理解不同mode的通道和像素值的存儲。
1 部分結果見下:
2 部分代碼和結果:
# 將不同模式的圖片打印出shape 和 [0, 0]像素點的值 from PIL import Image import matplotlib.pyplot as plt image = Image.open('images/tower.jpg') # 本地一個文件 mode_list = ['1', 'L', 'I', 'F', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr' ] for mode in mode_list: img = image.convert(mode) img_data = np.array(img) print('img_{:>1}.shape: {}' .format(mode, img_data.shape)) print('img_{:>}_data[0, 0]: {}'.format(mode, img_data[0, 0])) print('---')
# 以下為output
img_1.shape: (1276, 1920) img_1_data[0, 0]: False --- img_L.shape: (1276, 1920) img_L_data[0, 0]: 88 --- img_I.shape: (1276, 1920) img_I_data[0, 0]: 88 --- img_F.shape: (1276, 1920) img_F_data[0, 0]: 88.94599914550781 --- img_P.shape: (1276, 1920) img_P_data[0, 0]: 131 --- img_RGB.shape: (1276, 1920, 3) img_RGB_data[0, 0]: [ 51 97 147] --- img_RGBA.shape: (1276, 1920, 4) img_RGBA_data[0, 0]: [ 51 97 147 255] --- img_CMYK.shape: (1276, 1920, 4) img_CMYK_data[0, 0]: [204 158 108 0] --- img_YCbCr.shape: (1276, 1920, 3) img_YCbCr_data[0, 0]: [ 88 160 100] ---
- RGB 為真色彩模式, 可組合為 256 x 256 x256 種, 打印需要更改為 CMYK模式, 需要注意數值溢出的問題。
- HSB 模式(本篇沒有涉及),建立基於人類感覺顏色的方式,將顏色分為色相(Hue),飽和度(Saturation),明亮度(Brightness),這里不詳細展開。
- CMYK模式,應用在印刷領域,4個字母意思是青、洋紅、黃、黑,因為不能保證純度,所以需要黑。
- 位圖模式,見1, 顏色由黑和白表示(True, False)。
- 灰度模式,只有灰度, 所有顏色轉化為灰度值,見L,I,F。
- 雙色調模式(未有涉及),節約成本將可使用雙色調。
- Lab模式(未涉及,ps內置),由3通道組成(亮度,a,b)組成,作為RGB到CMYK的過渡。
- 多通道模式,刪除RGB,CMYK,Lab中某一個通道后,會轉變為多通道,多通道用於處理特殊打印,它的每個通道都為256級灰度通道。
- 索引顏色模式,用在多媒體和網頁,通過顏色表查取,沒有則就近取,僅支持單通道,(8位/像素)。