用convert命令转xpm的颜色问题

最近用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转换出来的文加头部代码是
  • static char * gimp_xpm[] = {
    "640 480 15 1",
    "     c None",
    ".    c #029D3B",
    "+    c #6D9B46",
    ...省略...
    ",    c #F2F9FE",
    "'    c #FDFFFC",

  • 而用convert转换出来的是
  • 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

搞定。

This entry was posted in 经验技巧 and tagged , . Bookmark the permalink.

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">