发新话题
打印

[软件技术] [分享] 【gdi++介绍】完美的gdi++字体渲染

本主题由 风云浪子 于 2008-6-3 22:57 分类
把本帖网址贴到网络上任何地方,同样可以获得推广币和用户等级提升 详情点击这里
http://www.770921.com/viewthread.php? tid=94079&fromuid=0 复制本帖地址
8月活动:积分获大礼活动(实物奖励)
联盟论坛管理人员大招募!

[分享] 【gdi++介绍】完美的gdi++字体渲染

【gdi++介绍】完美的gdi++字体渲染
(5月6日更新)
2008-02-11 02:46
关于氦版的gdi++以及gdi++的卸载方式请看这里: http://hi.baidu.com/fonlan/blog/item/5a68fea7da6c1791d14358d4.html
     gdi++是一个开源项目,它能接管windows系统的gdi字体渲染功能,实现比mac系统更华丽的字体渲染效果!使用pc的朋友再也不需要羡慕mac上清晰的中文字体了,因为gdi++是有过之而无不及的。
    gdi++和微软的cleartype其实是相类似的技术,都是24位字体渲染技术,在支持灰阶显示的字体边缘加上阴影,但gdi++的强大的可定制性和灵活性足以令cleartype无地自容,gdi++可精细定制到字体的粗细、色深,阴影的方位、长度,字体代换,排除列表等等相当多的自定义选项。


    gdi++的精髓在于它的配置文件的编写,不同的系统环境、显示器类型及使用者的视觉习惯都需要不同的配置文件来实现最后实际输出效果的最优化。在讲如何编写配置文件之前,先来看几张截图:
注:不同的显示器显示效果可能有所不同,效果上可能有所折扣。

这是gmail首页的截图:

我的电脑截图:

文本文件截图:

    怎么样?这些截图上的字体漂亮吧?想不想自己的电脑也能和上面一样呢?想就跟我来吧!!
-----------------------------------------------------------------我是勤劳的分割线,以下为正文---------------------------------------------------------------
题记:使用gdi++的前提是你使用的是支持灰阶渲染的字体,除了系统自带的几个中文字体不支持灰阶之外,现在较为流行的方正、华文、华康和汉仪等等中文字体都支持灰阶渲染。不要用着宋体却问我为什么效果没变!下文如无特别说明所指均为老版(freetype版)的gdi++,并非新的“氦”版。
    gdi++的安装这里就不多讲了,下载文末附件里的自动安装版双击就自动安装好并设为开机自动加载了。gdi++的安装唯一要注意的一点是要尽量安装在靠近系统核心的地方,即靠近system32文件夹的地方(附件中的自动安装版安装在windows\system32\gdi++目录下,以下内容也以此文件夹为例。),虽然官方的文档并没有特别说明这一点,但根据网友使用的反馈来看安装在靠近核心的地方会相对较为稳定,不知道是什么原因。

    gdi++的加载方式共有三种:第一种是手动将要渲染的程序拖到gdi++安装文件夹中的gdi++.exe上,这样这个程序的字体就被gdi++所渲染了。第二种方法是先创建一个gditray.exe的快捷方式,然后把快捷方式中的目标部分改为c:\windows\system32\gdi++\gditray.exe "-on",即在原来目标的后面加个空格,然后是"-on"就可以了,把这个快捷方式放到开始菜单的启动文件夹里,这样开机的时候gdi++就会自动开始渲染了。最后一种方法是注册表加载法,也是我最推崇的方法,将以下内容写入记事本:

windows registry editor version 5.00
[hkey_local_machine\software\microsoft\windows nt\currentversion\windows]
"appinit_dlls"="c:\\windows\\system32\\gdi++\\gdi++.dll"
并保存为gdi++.reg,双击导入即可。第一种是为临时想用用试试的人准备的,无法渲染系统字体。第二种是全局加载,即整个系统都会被渲染,而且系统托盘中有图标,可以轻易地停用或者启用gdi++,随意地切换多个配置文件或者重新渲染。但由于启动文件夹的优先级较低,所以往往要到进入桌面后才启动,桌面字体会经历一次由难看到清晰的转变,当然,在这之前弹出的所有对话框也不会被渲染。那为什么要推崇用注册表加载呢?注册表法也是属于全局加载,但他的优先级极高,windowsxp的”欢迎使用“界面还没出现它就已经加载了,而且稳定性相当好,当你配置文件已定,要准备进入长期使用的时候这种方法是首选。不过缺点是这个键值也较为容易被病毒木马所利用,所以大部分杀毒软件都会对这个键值有监控,甚至没有任何提示直接阻止,像瑞星2008那个lj。而且更换配置文件或者修改配置后像查看效果较为不便,需要重启想查看效果的软件
    接下来讲gdi++配置文件的编写,先发一份极限论坛70599大侠为gdi++配置文件做的注释:
[general]
; 0:disable 1:enable
hookchildprocesses=1
【应用到子进程】——比如你用启动方法1启动了一个winrar,双击里面的一个文本文档,那么下一步被打开的“记事本”程序也会使用gdi++渲染。
0:禁用;
1:启用。
; 0:normal 1:nohinting 2:autohinting
hintingmode=1
【字体微调】——对字体进行细微调整,以实现比较锐利、不模糊的效果。windows的cleartype就是用的这类技术,弊端是会使字体变形、笔画粘在一起。
下面会有两种情况:
情况一,当fontloader=0(在下面)时:
0:使用字体内部的微调,字体内部没有微调的话就和选1时的效果一样;
1:不使用微调;
2:用freetype对字体进行微调。
(注:1.下面的选了4或5的时候,就算是某个没有内部微调的字体,在此项设定为0时也还是会被应用微调;2.有内部微调的英文字体在下面的antialiasmode选择4或5时,推荐将此项设为0。)
情况二,当fontloader=1(在下面)时:
0和2完全一样,其他同情况一。
; -1:disable 0:normal 1:light 2:lcd(rgb) 3:lcd(gbr) 4:light-lcd(rgb) 5:light-lcd(gbr)
antialiasmode=2
【抗锯齿模式】
-1:禁用;
0:普通的灰阶渲染;
1:light模式,由freetype的reference来渲染;
2、3:rgb/gbr24位色渲染,转为液晶优化(电浆显示器也能用),2和3的区别在于红绿蓝的排列不同;
4、5:就是light模式下的rgb/gbr24位色渲染,最近版本才加入的新功能,推荐使用!4和5的区别在于红绿蓝的排列不同。
; 0-∞
maxheight=150
【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸。】
; 0:disable 1:enable
usemapping=0
【只有在fontloader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
; 0:disable 1:enable
fontlink=0
【字体链接】——当fontloader=0(在下面)时:
0:什么都不做;
1:使用注册表里的字体链接设置;
——当fontloader=1(在下面)时:
会保持启用的状态,但是所有字体链接的处理会交由win32api完成。
小贴士:字体链接:估计很多朋友都很熟悉了,windows里处理字体的一种技术。拿注册表里的默认设置举个例子,打开注册表的“hkey_local_machine\software\microsoft\windowsnt\currentversion\fontlink\systemlink”会发现英文字体tahoma里链接了一些字体,里面有一些是非英文字体,结果就是系统在调用tahoma时,遇到tahoma里没有的字符时就会到被链接的字体里去找。
;0:disable;1:ini only;2:ini+registry
fontsubstitutes=0
【字体替代】——当fontloader=0(在下面)时:
0:什么都不做;
1:使用该设置文件最下面的设置;
2:该设置文件最下面的设置和注册表里的设置一起启用。
当fontloader=1(在下面)时:会保持启用的状态,但是所有字体替代的处理会交由win32api完成
; 0:gdi32 1:freetype
widthmode=0
【字体排列】——字宽设置。
0:交还给gdi32.dll处理,有可能出现字体行距过小或者过大的不整齐的现象;
1:使用由freetype计算出来的宽度来排列字体,虽然会更美观一些,但是某些程序下可能出现混乱。
; 0:freetype 1:win32
fontloader=0
【字体的载入方法(注意是载入方法,不是渲染方法)】——上面反复提到的一个设置。
0:用freetype载入字体;
1:用windows的绘图核心载入字体。
很多freetype的设置需要此项选0才能生效。
; 0:new 1:old 2:original freetype algorithm
boldermode=0
【粗体字的渲染方法】——对象字体是没有单独粗体字文件的字体,有单独粗体字文件的字体(如微软雅黑)此项设置不会生效。
0:使用gdi0440以后版本的渲染方式;
1:使用gdi0424以前版本的渲染方式;
2:使用gdi0347以前版本的渲染方式,也就是freetype本身的粗体渲染。
; -1 = disabled 0 = use "gammavalue" 1 = srgb 2 = alternative
gammamode=1
【gamma模式开关】
-1:关闭;
0:使用设置的gamma值(gammavalue);
1:使用srgb的gamma值;
2:不明
; srgb ≒ 2.2 ct-default = 1.4
gammavalue=1.0
【gamma值】——只有上面gammamode=0的时候此项设置才有效。设置的数值可以精确到小数点后面一位。
*注:windows的cleartype的gamma值是1.4。
renderweight=1.0
【字体轮廓】——数字越大字体就越粗越黑(当字体为黑色时,其他颜色时表现出来的是颜色越深)。设置的数值可以精确到小数点后面两位。
contrast=1.0
【对比度】——数字越大越锐利,数字越小越发虚。设置的数值可以精确到小数点后面一位。
; 0-12
texttuning=0
texttuningr=-1
texttuningg=-1
texttuningb=-1
【文字边界设置】——-1时无效(0也是有效的)。texttuning是rgb三色全局设置,texttuningr、texttuningg、texttuningb是单独设置rgb三色。数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高texttuning,可以使文字周围的颜色看起来”淡一点“(比如在某些设置下,明明是黑色的字体,看起来却像是”五彩“的)。再加上renderweight,把这三个设置的微妙平衡调节好的话,能得到不输给mac的效果。
; -32:+32
normalweight=0
; -16:+16
boldweight=0
【字体粗细的单独调整】——可以单独设置常规(normalweight)、粗体(boldweight)状态下的粗细。数字越大越粗,负数也有效,可以使字体更细。
; -16:+16
italicslant=0
【字形为斜体时的倾斜加角】——可以设置字形为斜体时的倾斜加角。正数为右倾,负数为左倾。数字越大加角幅度越大。此项设置仅对没有单独斜体字形的字体有效。
; 0:none 1:default 2:light 16:legacy
lcdfilter=2
【液晶显示器的优化配置】——不同显示器效果也不一样,需要自己调试。只有freetype.dll是2.3.0以后的版本此项设置才生效。
shadow=1,1,8
【字体的阴影参数】
loadondemand=0
cachemaxfaces=16
cachemaxsizes=16
cachemaxbytes=5242880
;cachemaxbytes=10485760
【字体缓存、内存的设置】——同样的设置在不同的机器上效果完全不同,所以没有什么“最合理的设置”。适当设置的话能减少内存占用(当然再怎么少也少不过不用gdi++),并提高gdi++引擎的稳定性。
较低配置的机器请不要把loadondemand设为1,有死机的危险。
#forcechangefont=メイリオ
#forcechangefont="m+2p+ipag circle regular"
#forcechangefont=id-懐映体
#forcechangefont="sh g30-p"
#forcechangefont="sh g30-m"
#forcechangefont="ヒラギノ角ゴ6等幅-aquakana"
#forcechangefont="ヒラギノ明朝 pro w3"
#forcechangefont=s2gpうにフォント
#forcechangefont="s2g らぶ w4x1"
#forcechangefont="s2g らぶ"
【强制使用某一个字体】——无视所有其他字体,全系统的字体都会被这里设置的字体代替。句首加#的行将被注释掉,不会起作用。
[individual]
;書式: フォント=hinting,aamode,normalweight,boldweight,italicslant,kerning
メイリオ=0,
sh g30-aa=,,-16,-4
s2g らぶ=,,+32,+4
s2g らぶ w4x1=,,+12,+4
【单独设置某字体】——格式如上,用逗号隔开,逗号间什么都不写的话就用上面设置好的数值。
[exclude]
#marlett
#ms pゴシック
【除外的字体】——这里设置的字体不使用gdi++渲染。句首加#的行将被注释掉,不会起作用。
[excludemodule]
fontview.exe
【除外的程序】——这里设置的程序不使用gdi++渲染。句首加#的行将被注释掉,不会起作用。
[fontsubstitutes]
; 書式1: フォント=代替フォント
; 書式2: フォント,charset=代替フォント,charset
#arial,0=times new roman,0
#ms 明朝=ms ゴシック
【字体替代】——系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体。逗号后面的数字是字符编码。
    对70599大侠除了膜拜我想不出第二个词语。orz
    在实际的调校过程中主要就是gammavalue、renderweight、contrast和shadow这四个参数最为重要,他直接决定了gdi++在你的电脑上的表现,而我们的微调也主要是调这几个参数。
    这里再附上我的配置文件:
[general]
name=蓝枫冰月
hookchildprocesses=1
hintingmode=2
antialiasmode=4
maxheight=300
usemapping=0
fontlink=1
fontsubstitutes=1
widthmode=0
fontloader=0
boldermode=0
gammamode=0
gammavalue=1.3
renderweight=1.6
contrast=1.4
texttuning=0
texttuningr=-1
texttuningg=-1
texttuningb=-1
normalweight=0
boldweight=4
italicslant=0
lcdfilter=2
shadow=1,1,6
loadondemand=1
cachemaxfaces=32
cachemaxsizes=32
cachemaxbytes=10485760
#forcechangefont=simsun
[individual]
;顺序格式=hinting,aamode,normalweight,boldweight,italicslant,kerning
tahoma=1
ms shell dlg= 1
ms shell dlg 2 = 1
宋体 = 3,,8,+8
新宋体 = 3,,8,+8
consolas=0,4,6
lucida grande=0,4,6
verdana=0,4,6
ghk-zhonghei=0,4,6

[exclude]
fixedsys

[excludemodule]
winlogon.exe
fontview.exe
srengps.exe
gdi++.exe
cstrike.exe
cppide.exe
nvcplui.exe
xdict.exe
魅族 mini 化妆箱.exe
;winword.exe
;onenote.exe

[fontsubstitutes]
microsoft sans serif=simsun
system=simsun
    我使用的是字体是先锋论坛的一位网友修改的方正准圆_gbk,网页字体是蚂蚁老版的iyuanti,效果图如文首的那几幅截图。
--------------------------------------------------------------------很重要的,不得不看------------------------------------------------------------------
    下面我来说说使用gdi++过程中的一些需要注意的地方:gdi++,尤其是老版,虽然字体渲染效果非常出色,但兼容性较差,和很多软件都有兼容性问题。首先和ie的兼容性问题就不小,使用ie内核的浏览器时,遨游和遨游2开启后进入选项没多久就程序崩溃,世界之窗可以正常运行,但主界面菜单字体会变得比较大(这点其实可以通过把配置文件中的fontlink值改为0来避免,但在未替换宋体时会造成某些界面渲染变差),但可以在设置中制定主界面所用字体及字号。firefox2.0可正常运行,并且渲染效果较好,最新的firefox3.0beta3刚试了下启动后不久就崩溃,不清楚是什么原因(firefox3.0beta5及以上版本已完全兼容gdi++)。opera也工作正常。所以在gdi++环境下浏览器最好选择非ie内核的,如果一定要使用ie内核建议使用世界之窗2.0。
    gdi++和魔兽世界的小地图有冲突,因为魔兽的字体也使用了同样的字体渲染方式。解决方法是使用gditray加载方式,在启动魔兽世界之前关闭gdi++渲染即可。
    还有一个比较严重的问题是qq比较容易崩溃,操作的时候一不小心qq可能就崩溃了,解决的方法要么把qq加入gdi++的排除列表,要么把fontload改为1,但全局渲染效果会变差,要么就小心使用,忍受这颗不定时的炸弹,但最彻底的解决方案还是使用氦版的gdi++,qq不会出现崩溃的情况。
    gdi++对迅雷的支持业有限,虽然不会造成迅雷的崩溃,但迅雷一旦开始下载,gdi++便无法渲染迅雷的界面了,不知是什么原因。
    gdi++工作的方式是注入到所有正在运行的进程下,拦截所有原本由系统的gdi32完成的字体渲染工作。这两个行为都是极有可能被杀毒软件所误报的,所以请务必把gdi++添加到杀毒软件的可信任程序列表,否则他是无法工作的。还有通过注册表全局加载的时候,由于使用的是hkey_local_machine\software\microsoft\windows nt\currentversion\windows项下的appinit_dlls来实现开机自动加载,但由于这个键也是病毒木马常用的启动项,所以几乎所有的安全软件都会对这个键有所监控,请在安装前先关闭安全软件,否则可能出现无法导入注册表的情况。
    gdi++的配置文件有两种放法:一种是把配置文件直接保存成gdi++.ini,放在gdi++的安装目录下,优点是目录结构简单、清晰,建议使用注册表全局渲染时使用。缺点是只能使用一种配置文件,使用gditray加载时无法在右键中切换配置。另一种方法是在gdi++的安装文件夹中新建一个名为ini的文件夹,将所有的配置文件放在此文件夹下,然后gdi++安装文件夹下的gdi++.ini按如下格式编写:

[general]
alternativefile=.\ini\蓝枫冰月.ini
[gditray]
multiiniselector=1
redrawdelay=50
coolmenu=1

这里的蓝枫冰月.ini就是你放在ini文件夹中并且希望当前启用的配置文件。使用这个方法时不论使用何种全局加载方式,gdi++都会在开机时根据gdi++.ini文件中alternativefile后面的路径来寻找配置文件并加载,注意:这个路径是允许使用相对路径的。这种方法的优点也是显而易见,使用gditray加载时可以在邮件里轻松的切换多个配置文件,使用注册表加载时也只要修改gdi++.ini中的配置文件名(即上例中的蓝枫冰月.ini),然后注销即可切换配置。缺点就是多一个叫ini的文件夹,或许这个也算不上是缺点。
gdi++ freetype版智能安装程序see2下载:


gdi++1227氦版智能安装程序下载:



方正准圆 for simsun下载:




微软雅黑 for simsun下载:




丽黑 for simsun下载:




方正黑体 for simsun下载:




华文黑体 for simsun下载:




华文细黑 for simsun:




新方圆 for simsun:




华文细黑+lucida for simsun:




浪漫雅圓 for simsun(繁体):




iyuanti for simsun:




iwawa for simsun:




verasans for simsun:




华康pop1体w5 for simsun:




iyuanti下载:

TOP

过来看一下,很多图打不开呀,楼主

TOP

图挂了不少!!楼主请检查一下,先锁了!!

TOP

发新话题