MistHill 发表于 2012-3-6 20:52:04

GRUB4DOS的Gfxboot核心扩展

bean发布gfxboot-3.3-custom后,出现了GfxMenuInstaller、MsgDiyer、GfxMenu_Tools等基于bean编译init核心的gfxmenu定制应用。核心编程方面目前只有ded发布了一个自己编译的init和RIPPER-GFX with GUI,但它放弃了传统的gfxboot.cfg,而从menu.lst读入定制参数,这不是我所需要的。但很有意思,可以了解一下。

  本核心扩展主要针对timeout提供了四种图形呈现:数字倒计时、水平进度条、时钟和环形点倒计时。定制参数沿用gfxboot.cfg的方式,以保证尽可能的兼容现有的应用。源码和ded同样是基于gfxboot-3.3-custom的。因为openSUSE的源码,就timeout.inc而言,从早期的版本到目前最新的gfxboot-4.4.7-65.1,基本就没有更新,功能的增强可能在video和audio方面。

https://public.bay.livefilestore.com/y1pE0qH_fcc3Wx_qzmYKfzuhuJN0kOTev1eX3S9mRLLyW2H02xsTbDJCOloBz8xJ-8kRUqI_cJRc88WpoNcI5adyA/all.jpg?psid=1
  本图仅为示范,实际使用时可选择数字方式与其他三种的组合。

定制参考
========
原有参数说明
------------
penguin
  由于这个版本已不再支持penguin主题,此参数已无效。
welcome
  在gfxboot-3.3-custom版本中,splash已屏蔽,此参数无效。
boot_show
  GRUB4DOS中Boot Options无意义,其值应为0。
xmenu_hide_current
  建议设置为1。
disable_num_key
  菜单定制调试阶段可设为1;发布时应设为0,以允许菜单项热键。

扩展参数说明
------------
disable_ESC_key
  当值为1时,在主界面ESC键被忽略,不会出现以下提示,避免切换到文本模式;缺省值为0。
https://public.bay.livefilestore.com/y1prbFcwJwPEa58O2mCCfnuRCRh70R5Q50rQfQxdsDNgs-xTlFOvwANmA8cbTj8pYlA8NMEboj_VzWD3ZPs8qkA8A/toTextMode.jpg?psid=1
  另外增加了一个Ctrl+F1热键,由于显示“关于”对话框,不论hide_help为何值,此热键总是有效;类似于不论hide_poweroff为何值,F10总是有效。在hide_help=0时,初始F1也被定义为“关于”,键入F1一次后被定义为“帮助”。
https://public.bay.livefilestore.com/y1pupsKiFfUWJVICVubvGQCciqV6Ghfeqkbn0R-Ys_dgYpHBv6eKcX7o2F7ouIoCg-oi6qa9WWfHUJ0x62thIhZaQ/about.jpg?psid=1

一.数字倒计时
timeout_digit_enable
  缺省值为1,显示数字倒计时。
timeout_digit_x
  文本框中心横坐标,缺省值为靠屏幕右沿。
timeout_digit_y
  文本框上沿纵坐标,缺省值为靠屏幕上沿。
timeout_digit_color
  文本颜色,缺省值为白色。
timeout_digit_bg_color
  文本框颜色,缺省值为黑色。
timeout_digit_bg_alpha
  文本框透明度,取值范围:0~255。缺省值为0,完全透明,即不显示文本框。
timeout_digit_margin
  文本边距,缺省值为2像素。
timeout_digit_s_enable
  控制文本是否显示小写字母s;缺省值为1。
  提示:文本字体是单独定义的,程序会查找message是否包含16x16.timer.fnt文件,如果字体存在则使用之,否则会使用不同于主字体16x16.fnt的内置字体。定制见后面字体制作及资源包部分。

二.水平进度条
timeout_bar_enable
  缺省值为0,不显示水平进度条。
timeout_bar_width
  进度条宽度,缺省值为200像素。
timeout_bar_height
  色彩进度条高度,缺省值为10像素。如果message包含图片进度文件bar.jpg或bar_a.jpg,此值被忽略,使用图片高度。
timeout_bar_x
  进度条左上角横坐标,缺省值由程序计算,进度条屏幕居中。
#timeout_bar_y
  进度条左上角纵坐标,缺省值由程序计算,进度条与Fx热键位置纵向对齐。
timeout_bar_bg_color
  色彩进度条背景色,缺省值绿色。如果文件bar_a.jpg存在,此值被忽略。
timeout_bar_progress_color
  色彩进度条颜色,缺省值红色。如果文件bar.jpg存在,此值被忽略。
timeout_bar_bg_alpha
  进度条背景透明度,取值范围:0~255。缺省值为192。
timeout_bar_progress_alpha
  进度条透明度,取值范围:0~255。缺省值为192。
timeout_bar_step_size
  进度条步长。缺省值为1像素,即进度条是连续的,非间断式。
  解释:进度条分为色彩或图片,或两者的组合共四种,取决于文件bar.jpg和bar_a.jpg的存在与否:两者都存在为图片进度条,两者都不存在为色彩进度条,其中之一存在为色彩图片组合进度条。两文件必须为1像素宽,高度应相同。定制见后面图片处理及资源包部分。

三.时钟
timeout_clock_enable
  缺省值为0,不显示时钟。
clock_image_x
  时钟图片左上角横坐标,缺省值由程序计算,图片屏幕居中。
clock_image_y
  时钟图片左上角纵坐标,缺省值10像素。
clock_image_alpha
  时钟图片透明度,取值范围:0~255。缺省值为255。
clock_secondhand_color
  时钟秒针颜色,缺省值为红色。
clock_secondhand_end_length
  时钟秒针尾部长度,缺省值为10像素。
clock_secondhand_tip_fix
  时钟秒针针尖修正值,缺省值为20像素。此值控制秒针的长度,以与图片相匹配。
clock_secondhand_center_fix_x
  时钟秒针中心横坐标修正值,缺省值为0。可为负数,用于修正秒针旋转中心与时钟图片中心重合。
clock_secondhand_center_fix_y
  时钟秒针中心纵坐标修正值,缺省值为0。可为负数,用于修正秒针旋转中心与时钟图片中心重合。
  说明:时钟图片clock.jpg必须存在,否则无论timeout_clock_enable的取值如何都不会显示。定制时图片应尽量制作成正方形;一个可选的、与之大小相同的clock_a.jpg将作为蒙板使用。

四.环形点倒计时
timeout_circulardot_enable
  缺省值为0,不显示环形点倒计时。
circulardot_image_x
  图片左上角横坐标,缺省值由程序计算,图片屏幕居中。
circulardot_image_y
  图片左上角纵坐标,缺省值10像素。
circulardot_image_clear
  控制终止计时后是否保留图片,缺省值为0,即保留图片,适合图片作为Logo的情形。
circulardot_image_alpha
  图片透明度,取值范围:0~255。缺省值为255。
  说明:由于程序计算能力的限制,使用此功能有严格的要求。首先两个图片head.jpg和head_a.jpg必须存在,缺一不可。其次,图片宽和高不能更改。head.jpg的内容可定制,head_a.jpg中心部分的形状可结合head.jpg作相应修改,但不可破坏图片周边的环形点。

参考资料
========
  1. bean的经典文章:
   1) 分享:gfxmenu定制高级教程(新增可定制菜单)[http://bbs.znpc.net/viewthread.php?tid=5500]
   2) Configurable gfxmenu[http://reboot.pro/7155/]
  2. openSUSE的“SDB:Gfxboot”[http://en.opensuse.org/SDB:Gfxboot]
  3. Colin Bennett的“Themes for GRUB 2 Graphical Menu”[http://grub.gibibit.com/Themes]
  4. ded的“@DED-LEGO@ - flexible configuration (the gfxboot with the configuration directly from "menu.lst")”[http://reboot.pro/13437/]

演示模板说明
============
附件gfxmenu.Template.7z(300KB)解开后为可启动光盘映像gfxmenu.Template.iso(860KB),可用虚拟机加载试用。
映像仅包含两个文件,仅为菜单测试用,不包含示例菜单所需要的相应映像和外部命令:
  1. grldr,版本GRUB4DOS 0.4.6a 2012-02-27,内置了menu.lst。可换用其他版本和自己的菜单,但message里的16x16.fnt、translations.en、translations.zh_CN、translations.zh_TW必须作相应修改。
  2. message,其中主字库16x16.fnt(80KB)为演示所需的英、简、繁三种语言小字库,仅包括了帮助、演示菜单、程序控件所必须的字符集。
https://qbvfvw.bay.livefilestore ... download&psid=1

资源包说明
==========
gfxmenu.Resource.7z(38KB)
  1. timer.font里的字库用于替换16x16.timer.fnt
  2. bar.images里的图片用于替换bar.jpg或bar_a.jpg
  3. clock.images里的图片用于替换clock.jpg和clock_a.jpg
  4. head.images里的图片用于替换head.jpg和head_a.jpg
https://qbvfvw.bay.livefilestore ... download&psid=1

几个重要问题的说明
==================
1. 制作符合gfxmenu要求的图片
  Gfxboot支持JPG或PCX两种格式的图片,对JPG仅支持16/32位两种模式。经常遇到的问题是:为什么Photoshop保存的jpg无法使用?由于jpg压缩时的复杂性,参数众多,这里有一个叫做Chroma Subsampling的问题。gfxboot解析器为保证核心的小巧高效,在图像质量和文件大小上进行了均衡,采样因子为2x2,1x1,1x1(即所谓的4:1:1)压缩的jpg图片才会被正确处理,否则将无法正常显示。
  在文章“ImpulseAdventure - JPEG Chroma Subsampling”[http://www.impulseadventure.com/photo/chroma-subsampling.html]的末尾,列出了Photoshop CS2在保存方式和不同Quality值组合时采用的Chroma Subsampling值,仅Save As/Quality 0-6、Save For Web/Quality 0-50两种可用,这样低的Quality值图片已经惨不忍睹,无法使用。我这里在Photoshop CS3上测试的结果是,Save As/任何Quality值都不能正常显示,Save for Web & Devices/Quality=50时可用,但图片质量下降厉害。也就是说不同版本的Photoshop,内部算法都不一样。如果用较高的Quality值保存,再用Windows自带的“画图”保存一下,也是可以显示的,但是Quality值不可控制,经常不能满足要求。
  这里提供一个很好的解决方案,使用Independent JPEG Group的开源CJPEG,目前版本是8d 15-Jan-2012。下载一个5.28MB的文件http://jpegclub.org/jcropsrc.zip,显然包括源码,但我们只需要其中编译好的可执行程序,解压出jpeg-8d\cjpeg\Release\cjpeg.exe,仅159,744字节。然后在命令行键入:

cjpeg.exe -quality 85 -optimize -sample 2x2,1x1,1x1 输入图片(.jpg或.bmp) 输出图片.jpg

  这里可以调整quality的值,直到观察图片无明显噪点就可以了。
  如果对Photoshop不熟悉,可用GIMP2。可在http://www.gimp.org/下载,目前稳定版本大概是2.6.12,for Windows的约20.2MB。功能也十分强大,支持多国语言。在保存为JPEG时,点开"Advanced Options",选择"Subsampling: 2x2,1x1,1x1 (smallest file)",再选择合适的Quality。同为开源项目,猜想GIMP2应该是用了IJG的库。
  关于bar.jpg/bar_a.jpg的制作。
  新建一个图片,宽度100或200像素,能观察整体效果即可,高度按需要设定。纵向拉一个灰度渐变,仔细调整到满意的效果。然后复制这个灰度图像,简单一点的话就用Colorize上色,要精确一点的话用Curves上色,最后把这些图像裁减为1像素宽度保存。

2. 字库的定制
  gfxboot-3.3-custom里面的chs.txt是bean预先定义的约300个常用字符,直接使用它是不可取的。首先字库会比较大,约300KB,有些字符根本就用不到,其次,菜单中有的字符又没有包含进去出现掉字的情况。可以用mkblfont.exe强大的功能来定制小字库。

  主字库16x16.fnt的制作
  ---------------------
  1) 安装要用到的字体。
  2) 在命令提示符下用copy将help-boot.*.html或*.hlp+*.tr+translations.*复制合并为my_chs.txt,通配符*包括准备使用的语言如en、zh_CN、zh_TW等等。这里还可以使用vbscript脚本过滤掉半角字符和相同的字符。
  3) dir %systemroot%\fonts\*.ttf %systemroot%\fonts\*.ttc /w /o:N | find ".tt" /i
  4) mkblfont.exe -v -l 20 -a 0x20-0x7e -t my_chs.txt -f trebuc:prop=0:space_width=4:size=17:nobitmap=1:autohint=1:bold=0 -f simhei:prop=1:space_width=4:size=18:nobitmap=1:autohint=1:bold=0 16x16.fnt >f.log
  参数解释:
  -l xx:行高xx;
  -a 0x20-0x7e:西文字符集;
  -t my_chs.txt:全角字符集,必须为UTF-8编码的文件;
  -f trebuc:西文字体,-f simhei:全角字体,字体名按第3)步显示根据需要输入,不含后缀;
  prop=x:字符间附加间距;
  space_width=x:字符间间距;
  size=xx:字体高度;
  nobitmap=1:有些矢量字体里也包含一些点阵字体,nobitmap=1是让mkblfont忽略它们,直接使用矢量字体;
  autohint=1:打开反锯齿的效果;
  bold=0:不转为粗体。
  最后应检查日志文件f.log,"Missing Chars"行下面是否有缺字出现,必要时应重新选择字体文件,再次生成16x16.fnt。最好写成一个cmd批处理方便一些。

  数字倒计时字库制作
  ------------------
  1)~3)步同上。
  4) mkblfont.exe -v -l 20 -a 0x30-0x39,0x73 -f tahoma:prop=0:space_width=4:size=17:nobitmap=1:autohint=1:bold=0 16x16.timer.fnt >f.s.log
  -a 0x30-0x39,0x73:只包含数字0-9和小写字母s。
  可参考makefile文件里的字库制作部分,更复杂的可指定多个字体文件并定义相应的字符集。

3. 菜单翻译文件的定制
  Gfxboot通过热键F2来实现菜单语言的切换。要使用几种语言就要准备相应的翻译文件。如英、简、繁就需要translations.en、translations.zh_CN、translations.zh_TW。
  加上menu.lst就有四个文件,文件要求为:
  a) UTF-8编码;
  b) 不得有BOM;
  c) 换行符只能是unix的LF(\n),不能是Windows的CR+LF(\r\n);
  d) 文件末尾一定要有一个空行,即\n\n。
  menu.lst文件title后面的文本称为标记文本,与之对应的翻译文件必须要有完全相同的标记文本,接下来是一行翻译文本。程序不会进行错误检查,只简单地按\n来分离文本,一行标记,一行翻译。如果为可读性而用一个空行,会造成只有奇数行被翻译的现象,要用就必须用两个空行。

  结束语
  ======
  1. 不得用于商业用途;不对使用造成的后果承担责任。
  2. 程序未考虑水平进度条、时钟和环形点倒计时重叠的情况。
  3. 数字倒计时重叠在时钟或环形点倒计时上时不可用;只处理了与水平进度条重叠的情况。

https://public.bay.livefilestore.com/y1pupsKiFfUWJWs8uheFzne1Nv18_HCGo675Xt8_OVUyZUcmZh3H74TWhMFQh1K-eXC48jH3jUWUor1j11Xopsrdg/ubuntu.jpg?psid=1

3370123 发表于 2012-3-6 23:16:51

不错

最后一张图,看起来像 burg grub2,很漂亮……

zhs509 发表于 2012-3-6 21:56:38

谢谢分享,确实很酷啊!下次合盘用上看看!

下次试试看,企鹅+时钟的效果!

[ 本帖最后由 zhs509 于 2012-3-6 22:03 编辑 ]

MistHill 发表于 2012-3-6 21:05:05

原帖由 zhs509 于 2012-3-6 20:58 发表 http://bbs.wuyou.net/images/common/back.gif
楼主能否分享一下ISO模版。。。
第一次发帖,无上传权限。帖子里有ISO模版的链接。
PS: 曾用过您的VBE模版,谢谢!

zhs509 发表于 2012-3-6 20:58:18

楼主能否分享一下ISO模版。。。
看到ISO模版了,我上传一下,大家可以直接下载测试效果!

[ 本帖最后由 zhs509 于 2012-3-6 21:58 编辑 ]

my9823 发表于 2012-3-7 06:25:53

gfxboot.cfg
这个文件在那里,message压缩包中么?

zhs509 发表于 2012-3-7 08:51:33

回复 #6 my9823 的帖子

是在message里面。。。

Plantsoot 发表于 2012-3-7 09:29:33

楼主是强人,特来学习,一直想读gfxboot的源代码,每次都放弃了。

看来,如果继续开发和扩展gfxboot的话,还是非常有前途的。

bfgxp 发表于 2012-3-7 09:54:10

是很漂亮,不过还是g4d内建的vbe好用。

网上飞鹰 发表于 2012-3-11 00:07:16

不错!挺酷的。。。。。。

2011bootkiller 发表于 2012-4-9 23:49:51

回复 #1 MistHill 的帖子

老大,强人也,顶起来!

假大空 发表于 2012-4-10 00:10:00

界面挺漂亮的,支持下

讯极天度 发表于 2012-4-10 08:30:51

看起来不错 有时间去弄弄

drroot 发表于 2012-4-10 14:56:31

Very nice.
请问启动菜单中的Win7pe streamlined network edition在哪里有下载吗?
这个PE是否包含浏览器 支持网络呢?

原帖由 MistHill 于 2012-3-6 20:52 发表 http://bbs.wuyou.net/images/common/back.gif
bean发布gfxboot-3.3-custom后,出现了GfxMenuInstaller、MsgDiyer、GfxMenu_Tools等基于bean编译init核心的gfxmenu定制应用。核心编程方面目前只有ded发布了一个自己编译的init和RIPPER-GFX with GUI,但它放弃 ...

2012u32227 发表于 2012-4-15 16:04:08

message修改後怎打包呢?謝謝!

fnycc 发表于 2012-11-8 16:22:30

坐下来慢慢学习ing……

穷开心 发表于 2013-1-22 17:13:14

这个挺有意思学习下看看怎么用

2010javalet 发表于 2013-2-23 22:00:36

非常酷的界面啊!!真不错

33445566 发表于 2013-4-7 10:12:25

很好,迟来的学习

M 发表于 2013-4-7 12:06:42

去年的帖子么?还是论坛时间出了问题?

xadmin 发表于 2013-5-8 11:43:21

原来我一直只知其一不知其二啊,内核的东西确实有点深奥,学习ING……

cctvb999 发表于 2013-7-26 23:53:43

https://public.bay.livefilestore.com/y1pupsKiFfUWJWs8uheFzne1Nv18_HCGo675Xt8_OVUyZUcmZh3H74TWhMFQh1K-eXC48jH3jUWUor1j11Xopsrdg/ubuntu.jpg 楼主分享下这个模板

Aslanll 发表于 2013-12-3 15:06:09


是很漂亮,不过还是g4d内建的vbe好用。

qxhdly 发表于 2013-12-6 12:35:20

来学习挺酷的。。。。。。

mini92 发表于 2016-9-10 10:35:35

感谢分享,感谢 分享 ,,,,,,

mini92 发表于 2016-9-10 15:36:16

请问下大神message的打包工具是什么?temple文件中message文件使用cpio打包再解包,就黑屏了,

mrprogram 发表于 2018-6-12 01:12:03

朋友请原谅翻译,我只会说西班牙语。 你可以用gfxboot.cfg来帮助我把透明(menu_bar_color)。我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。谢谢...

mrprogram 发表于 2018-6-12 01:34:11

朋友请原谅翻译,我只会说西班牙语。 你能帮我用gfxboot.cfg如何设置transparent_bar_color菜单。我正在创建一个32 GB的Pendriver usb,多个操作系统的多重启动。注意:我使用这个文件gfxboot-3.3-custom.zip,用cpio编译(GFX-RIPPER)。谢谢...

201287zr 发表于 2019-4-25 20:41:52

终于晓得jpg怎么显示不出来了。。。
页: [1]
查看完整版本: GRUB4DOS的Gfxboot核心扩展