今天突然需要用到PPM
這個圖像文件格式,之前沒見過,在此記錄一下。
PPM
、PGM
、PBM
這三個圖像文件格式很少見,其實也不難,分別用於彩色圖像、灰度圖像、二值圖像。這里以PPM
格式為例。
PPM
格式有兩種類型:字節碼和ASCII。前者是二進制文件,后者是純文本文件。
使用convert
命令可以將圖像轉為PPM
格式:
# 字節碼
$ convert xxx.jpg xxx.ppm
# ASCII
$ convert xxx.jpg -compress none xxx.ppm
ASCII類型的PPM
文件示例:
P3
1305 1305
255
229 232 237 228 231 236 ...
第1行是P3
,第2行是圖像大小,第3行是最大值,一般是255
。從第4行起就是每個像素的顏色值了,像素順序一般是從左到右、從上到下,通道順序一般是RGB。
字節碼類型的PPM
文件示例:
50 36 0A 31 33 30 35 20 31 33 30 35 0A 32 35 35 0A E5 E8 ED E4 E7 EC ...
最開始的50 36
對應ASCII為P6
,31 33 30 35
對應ASCII為1305
。32 35 35
對應ASCII為255
。后面的像素值以十六進制表示:
$ bc -q
obase=10
ibase=16
E5
229
E8
232
ED
237
Python的Pillow
庫可以讀取、存儲字節碼類型的PPM
格式:
from PIL import Image
# 存儲PPM格式
im = Image.open('xxx.jpg')
im.save('xxx.ppm')
# 讀取PPM格式
im = Image.open('xxx.ppm')
im.show()
PGM
頭部用P2
和P5
分別表示ASCII類型和字節碼類型;PBM
頭部用P1
和P4
分別表示ASCII類型和字節碼類型,但沒有像PPM
第3行的最大值,ASCII類型的像素值都是0或1。