前言
PBM/PGM/PPM的分类
PBM:位图(bitmap),仅有黑与白,没有灰,老大
PGM:灰度图(grayscale),老二
PPM:通过RGB三种颜色显现的图像(pixmaps),老三
PBM/PGM/PPM 图片是同类图片格式,图像文件格式为
文件类型(P1/P2/P3/P4/P5/P6/)+ 注释(“# XXXX”) + 宽度与高度(XXX XXX)+ 最大像素值(XXX) + 编码(ASCII 或 Binary)
Magic Number | Type | Encoding |
---|---|---|
P1 | Bitmap,PBM文件 | ASCII |
P2 | Graymap,PGM文件 | ASCII |
P3 | Pixmap,PPM文件 | ASCII |
P4 | Bitmap,PBM文件 | Binary |
P5 | Graymap,PGM文件 | Binary |
P6 | Pixmap,PPM文件 | Binary |
举例
1 笔者项目中替换的logo格式(Linux内核的logo XXXX.ppm文件必须为P3格式)
00000000h: 50 33 0A 38 30 30 20 34 38 30 0A 32 35 35 0A 31 ; P3.800 480.255.1
00000010h: 39 36 20 31 39 36 20 31 39 36 20 20 32 33 37 20 ; 96 196 196 237
00000020h: 32 33 37 20 32 33 37 20 20 32 33 37 20 32 33 37 ; 237 237 237 237
00000030h: 20 32 33 37 20 20 32 33 37 20 32 33 37 20 32 33 ; 237 237 237 23
00000040h: 37 20 20 32 33 37 20 32 33 37 20 32 33 37 20 20 ; 7 237 237 237
00000050h: 32 33 37 20 32 33 37 20 32 33 37 0A 32 33 37 20 ; 237 237 237.237
00000060h: 32 33 37 20 32 33 37 20 20 32 33 37 20 32 33 37 ; 237 237 237 237
00000070h: 20 32 33 37 20 20 32 33 37 20 32 33 37 20 32 33 ; 237 237 237 23
00000080h: 37 20 20 32 33 37 20 32 33 37 20 32 33 37 20 20 ; 7 237 237 237
00000090h: 32 33 37 20 32 33 37 20 32 33 37 20 20 32 33 37 ; 237 237 237 237
000000a0h: 20 32 33 37 20 32 33 37 0A ; 237 237.
2 用各种格式转换器转换出的logo格式(采用其他图片转换器转出来的XXXX.ppm文件为P6格式):
00000000h: 50 36 0A 38 30 30 20 34 38 30 0A 32 35 35 0A BF ; P6.800 480.255.?
00000010h: BF BF F1 F1 F1 EC EC EC ED ED ED ED ED ED ED ED ; 靠耨耢祆眄眄眄眄
00000020h: ED ED ED ED ED ED ED ED ED ED ED ED ED ED ED ED ; 眄眄眄眄眄眄眄眄
参考链接
PPM图片格式及其C读写代码:
https://www.cnblogs.com/oloroso/p/5846623.html?utm_source=itdadao&utm_medium=referral
格式转换思路
1、将.xxx文件先转换为.png文件
2、将.png文件先转换为.ppm文件
1 Linux内核设置
Device Drivers →
Graphics support →
Bootup logo (选中) →
Standard black and white Linux logo (选中)
Standard 16-color Linux logo (选中)
Standard 224-color Linux logo (选中)
2 Linux内核默认的图片
选中“Standard 224-color Linux logo”代表着开启Linux内核配置选项“CONFIG_LOGO_LINUX_CLUT224”,默认的图片logo_linux_clut224.ppm,图片信息为80*80、P3格式,logo如下:
3 安装netpbm工具(图片格式转换工具)
# 查看系统有没安装
$ ls /usr/bin/pnm*
$ ls /usr/bin/pngtopnm /usr/bin/pnmquant /usr/bin/pnmtoplainpnm
# 如果没有,则安装netpbm工具;如果有,可以更新netpbm工具
$ sudo apt-get install netpbm
4 将目标文件转换为.png格式文件
在线格式转换链接:
https://zhuanhuan.supfree.net/
例如:上传一张文件名为Logo.jpg,转换后下载,将其命名为Logo.png
5 图片转换
将下面的东西导入Shell脚本
#!/bin/sh
echo "开机启动的logo修改"
# logo名称(转换成.png文件名),这里需修改
LogoName="Logo"
# 内核的logo的默认路径,这里需修改
LogoPath="/XXXXXXXXXX/linux/drivers/video/logo/"
# 转换png成pnm格式
pngtopnm "$LogoName".png > "$LogoName".pnm
# 转换像素数为224
pnmquant 224 "$LogoName".pnm > "$LogoName"_224.pnm
# 转换二进制的pnm格式为文本的ppm格式
pnmtoplainpnm "$LogoName"_224.pnm > "$LogoName"_clut224.ppm
# 删除内核默认logo文件并添加logo文件,logo_linux_clut224.ppm 为默认的logo文件名
# logo_linux_clut224.c 为编译内核自动生成的文件
rm -rf "$LogoPath"logo_linux_clut224*
cp "$LogoName"_clut224.ppm "$LogoPath"logo_linux_clut224.ppm