最近用convert命令转换grub4dos的xpm背景(新支持的那个gfxmenu迟点再研究),网上流传的方法是
convert slax.png -resize 640x480 -colors 14 splash.xpm
发现转来的图像有问题,显示是能显示,颜色的都变了,用GIMP来转换的却没事,那么因该不是grub4dos的问题。
另一个命令用法是用“-geometry 640×480!”参数,而不是“-resize 640×480”,都一样,没分别。以前用这个方法是行的,那么应该是convert新版问题。
分析
现在Ubuntu的convert命令是在“imagemagick”包里,目前版本为6.3.7。于是我vim和用GIMP转换出来的对比一下。
- 用GIMP转换出来的文加头部代码是
- 而用convert转换出来的是
static char * gimp_xpm[] = {
"640 480 15 1",
" c None",
". c #029D3B",
"+ c #6D9B46",
...省略...
", c #F2F9FE",
"' c #FDFFFC",
static char *__[] = {
"640 480 14 1",
" c #51D27E7E25A6",
". c #019B9A393495",
...省略...
"= c #BB7BD38EFA4F",
"- c #F4B8F8ADFF16",
很明显,颜色代码长度后者比前者多了几个字符,用gcolor2去色测试(用vim打开xpm有颜色显示的),如果要转换为gimp那种表示法,就是”#51D27E7E25A6″为”#517E25″,然后重新测试,OK,搞定,看来问题就是出现在颜色的表示方法上。
还有一个区别就是第二行第三个字符,GIMP是15而convert是14,而GIMP的还多了一个“None”值,这个我也研究了一下,迟点再说。
解决方法
用GIMP转换应该是8位色(每个颜色),而convert是16位。看看man,找“bit”,没结果,只好认真看一下,有个“depth”参数,深度?应该是色深,也就是颜色位数了,最后用命令
convert slax.png -resize 640x480 -colors 14 -depth 8 splash.xpm
搞定。
