usplash主题制作问题
August 20th, 2009
Comments off
Debian下目前有3个可以用的usplash主题包,分别是usplash-theme-debian,debian-edu-artwork-usplash,brdesktop-artwork-usplash。目前在lenny下制作出来的效果都有问题。截图:
为了解决这个问题,我先分析了usplash主题的制作原理。usplash的主题制作过程大概如下:
- 由一个svg图,分别生成1024×876,800×600,640×480等分辨率下的背景图片。其实也可以不用svg,但非矢量图缩放效果可能不佳。也可以手动PS不同分辨率下的背景图片,也就不用借助svg的缩放了;下图是一个背景图:
- 编辑生成一个进度条的png文件。图像中除进度条部分,其他应该是透明色;下图是用gimp编辑进度条的透明色效果:
- 将不同分辨率下的背景图和进度条叠加,生成2种叠加后的进度条效果,分别代表"进度为0"和"进度为100%"两种状态;
- 统一所有图片的调色板。包括不同分辨率下的背景图、进度条效果图。下面是用gimp编辑图片看到的调色板:
- 将png图片转换为c文件
- 将c文件编译链接成so文件
而产生前面截图那样的错误,是因为图片的调色板没有统一。而调色板不统一的原因,是因为usplash用的图片转换工具修改了统一调色板的方法。
本来,usplash 用的统一调色板的方法,是通过imagemagick提供的convert命令,先将png转换到gif,再转换回png的方法。(可能是因为convert对png格式的调色板支持不好)。方法如下:
convert image.png +dither -map ./cmap.gif gif:- | convert gif:- image.png
后来这种方法不管用了。原因是从gif转回png格式时,convert不再保留调色板。
经过网上的搜索,发现新版本的imagemagick应该用下面的命令设置调色板:
convert +dither image.png -type Palette -depth 8 -map cmap.gif image.png
修改Makefile中相关语句后,再次编译usplash主题,就会出现正确的效果了:
附usplash-theme-debian的patch:
--- a/Makefile 2009-08-20 00:51:49.000000000 +0800 +++ b/Makefile 2009-08-20 00:34:28.000000000 +0800 @@ -88,8 +88,8 @@ %.c: %.png cmap.gif $(E) " PNGSRC " $@ - $(Q) convert $< +dither -map cmap.gif gif:- | \ - convert gif:- $< + $(Q) convert +dither $< -type Palette -depth 8 -map cmap.gif $<.new + $(Q) mv $<.new $< $(Q) pngtousplash $< > $@ #cmap.gif: background.svg progress.png
Recent Comments