2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Fedora 7 字體美化

 sigmon 2012-03-31
edora7(Moonshine)發(fā)布也有一段時間了,這個版本包含了GNOME2.18KDE3.5.6,美工有很大的提高;使用Xorg1.3版本,對nVidia顯卡支持很好,支持顯示器的熱插拔和自動識別;yum性能也得到很大的提升,其它各方面的表現(xiàn)都很不錯的,唯一的缺點就是中文字體顯示不夠完美。雖然比FC6有了極大的提高,但還是趕不上Ubuntu7.04。于是就有了自己動手美化中文顯示的想法,下面我把美化過程的整理給大家。
    試驗環(huán)境:Fedora7,KDE3.5.6,在GNOME和其它發(fā)行版本上差別應該不大。

    首先,我們來了解一些關(guān)于字體方面的知識。
一、點陣字體(BDF)與矢量字體(TrueType
   大家知道PC的 顯示器是點陣顯示設備,圖像顯示的精細程度取決于顯示器的分辨率。文字也必須轉(zhuǎn)換為點陣信息方可正常顯示。于是人們設計制作了點陣字體,這種字體類似于位 圖圖像,以點陣詳細記錄了字體大小、形狀;這樣字體信息被讀取后不需要任何轉(zhuǎn)換就可直接在顯示器上顯示,由于制作精細,因此顯示效果也是最好的。但這種字 體不能縮放,需要為每種字號制作點陣信息才能滿足不同大小字體的顯示,因此導致字體制作工作量大、耗時、占用空間大等問題。后來人們設計了矢量字體,它是 用矢量圖形記錄了筆畫和字形等信息,解決了字體縮放的問題。
   矢量字體在顯示時轉(zhuǎn)換為點陣信息后才能顯示,在小字體情況下,轉(zhuǎn)換得到的點陣信息質(zhì)量與點陣字體相差甚遠,導致小字體顯示效果很差。因此人們?nèi)煞N字體之長,設計了一種即包括小字體點陣信息,又包括矢量字形的字體。比如著名的宋體(simsun),它包括1213、14、1516、18點的點陣字庫,還包括矢量字形。
    矢量字體涉及到以下兩個概念:
   AAanti-alias)抗鋸齒技術(shù),它將字型以實際數(shù)倍大小繪制,然后縮放成想要的大小,未能占滿一格像素的格子就用灰階填補。對于英文字符,因其筆劃簡單,所以比較美觀,但對于中文小字體,會導致文字看起來發(fā)虛,模糊不清的問題。
   hinting字體微調(diào)技術(shù),它是字體的一種額外信息,嵌入字體內(nèi)部,告訴字體渲染引擎如何渲染字體,使用字體看起來更美觀。但hinting制作復雜,非常耗時,所以帶有良好hinting的字體并不多(特別是中文字體)。對于字體的hinting有四種風格hintnonehintslight、hintmediumhintfull,分別是指無hinting、輕度hinting、中等hinting、完全hinting
   hinting如果調(diào)整不好,可能導致字體顯示并不好看,且由于hinting是有專利的,不能免費無限制地使用,freetype又做出了自己的字體微調(diào)技術(shù)autohint,經(jīng)過不斷改進,已經(jīng)改善了部分字體的顯示效果。autohint是通過程序來實現(xiàn)的,并且是針對所有字體,當然不可能有專門為每種字體制作的hinting技術(shù)效果好。

二、重要的概念:DPI
    DPIDotperInch),這是一個印刷上的單位,是指每英寸上的油墨點數(shù)。這里把DPI用來描述顯示器上每英寸所包括的像素(Pixel),其值越高越精細,顯示效果就越好。由于顯示器的分辨率、點距(或珊距)及尺寸的不同,因此不同顯示器的DPI也有差別。
   那么我們?nèi)绻嬎阕约猴@示器的DPI呢?先測出自己顯示器的寬(width)和高(height),單位是cm,知道顯示器的分辨率。注意,如果是液晶顯示器,則它只有一個分辨率即其最大分辨率。對于CRT顯示器,它可以用多種分辨率,你先將其調(diào)整為最合適的分辨率(比如17CRT顯示器調(diào)整為1024768)。由于1(inch)=2.54(cm),于是有下面的公式:
    水平DPI=(水平分辨率/width)*2.54
    垂直DPI=(垂直分辨率/height)*2.54
    有的顯示器上水平DPI和垂直DPI有少許出入,這也是正常的。

   大家可以看出,同樣像素的字體在高DPI的顯示器上顯示出來會較小。既然不同顯示器的DPI不同,那么用像素來描述字的大小顯然不合適,于是還有一個字體大小的單位:磅(point)。
   磅是重量單位?不,此磅非彼磅,在這里,它才是字體大小的絕對度量(沒忘記MSWord里的行距的單位吧)。
    1磅=172英寸。
   不管何種大小的字體,最終都要換算成像素之后,才能在屏幕上顯示。那么像素(px)和磅(pt)換算關(guān)系為:
    pxptDPI72
   用這個公式可以算出,一個9磅的字在96DPI的顯示器上用12像素來顯示,但在75DPI的顯示器上卻只用9像素來顯示。因此如果你的系統(tǒng)里為顯示器設置了錯誤的DPI,那么最終顯示出來的字將是不正常的大小。
   請注意,Firefox里設置的字體大小是以像素(px)為單位,在系統(tǒng)其它你能看到的絕大多數(shù)地方,都是以磅(pt)為字體大小單位。
    好了,我們來看看自己XserverDPI設置:
    $xdpyinfo |grep resolution
    resolution:   75x75 dots per inch
   通過上面的方法已經(jīng)得知我的顯示器DPI約為96,這里卻設為75,明顯不正確。打開/etc/X11/xorg.conf,在Section"monitor"段中加入DisplaySize參數(shù):
    Section"Monitor"
        ……
        DisplaySize 270 203  # 1024x768  96pi
    EndSection
   重啟X后,再使用上述xdpyinfo命令便可看到效果。不管實際的DPI是多少,都建議你將DPI值設為6甚至12的倍數(shù)。因為我們使用磅來計算字體大小,在轉(zhuǎn)換時采用舍入方法來選擇鄰近的值作為字體最終的大小(像素),如果DPI值不為612的倍數(shù),將可能導致相鄰的字號轉(zhuǎn)換后得到相同或差別很大的像素的字。
   打開/etc/X11/Xresources文件,找到開頭為Xft.dpi那一行將其冒號后的值改為96(你的實際DPI)。
   再打開/etc/fonts/local.conf,在<fontconfig></fontconfig>之間加入下面幾行:
        <matchtarget="pattern">
                <editname="dpi" mode="assign" >
                       <double>96</double>
                </edit>
        </match>
   5行代碼,也可以寫在/etc/fonts/fonts.conf~/.fonts.conf中,但是不建議這么做,因為在升級或其它設置時,可能會被覆蓋。如果沒有這個文件,則創(chuàng)建一個。這是一個XML格式的文件,下面會有詳細介紹。
   上面兩個修改DPI值的地方,其中GTK程序會讀取Xresources文件中的設置,而Qt程序則會應用fonts.conflocal.conf中的設置。

三、Linux系統(tǒng)下字體顯示原理
   現(xiàn)代Linux的字體處理系統(tǒng)大都采用Xft、FontconfigFreetype來處理字體。
   Fontconfig提供了一系列字體設定的函數(shù)庫,應用程序直接向其索取字型;還負責發(fā)現(xiàn)和自動配置新字體,使新字體安裝變得簡單。它由兩部分組成,其一是設定模塊,把XML配置文件轉(zhuǎn)換成Fontconfig的內(nèi)部設定;另一是對比模塊,將應用程序傳來的字體樣式需求與現(xiàn)有字體對比入修改,傳回最相似的字體。
    Xft也是一套library,它使用fontconfig找出來的字型,將其繪制出來。
   Freetype可以說是一種完整的字體光柵化引擎,它提供一個簡單的、易用的并且統(tǒng)一的接口實現(xiàn)對多種字體文件的訪問。目前版本是2.x,與1.x版本相比主要是支持Anti-aliashinting。freetype的改變會影響到Xft畫出來的字。
   說了這么一段大家一定頭暈了,其實我也暈了。簡單地說就是由Fontconfig選出來的字,再由Freetype決定如何去畫,最后由Xft來處理畫字。這是我個人的理解,可能可能不太準確,請大家不吝指正。

四、安裝新字體
   講了這么多枯燥而繁瑣的理論,可能有的讀者都已經(jīng)睡著了。好,我們下面開始進行實際的美化操作!
    安裝MScorefonts,這里http://corefonts./有下載地址和詳細的安裝方法,RedhatFedora的用戶可能使用下面這個命令來安裝,但前提是已經(jīng)可以上網(wǎng)并設置好yum源。
    yuminstall msttcorefonts
    Debian/Ubuntu用戶:
    apt-getinstall msttcorefonts
   十一種字體將會被安裝到/usr/share/fonts/msttcorefonts/目錄中。然后我們到windows中把中文字體細明體和新細明體(mingliu.ttc)、華文細黑(stxihei.ttf)也考到此目錄吧,你也可以把其它常用的中文字體(比如楷體、幼圓等)也考過來,不過在下面的配置就不體現(xiàn)它們了。而對于宋體(simsun.ttc),我們?nèi)?/font>http://wyx./jmm/Computing/SIMSUN.rar下載fromnuaa兄制作的這個版本,它帶有1019點十種點陣字體,比Windows帶的效果更好。Fedora使用的是文鼎的宋體(uming.ttf)和楷體(ukai.ttf),實在不怎么好看,可以把它刪去,當然你也可以保留。之后重啟X字體服務"servicexfs restart"讓系統(tǒng)自動發(fā)現(xiàn)并配置新字體。

五、fontconfig配置
   前面介紹過,fontconfig可以把應用程序傳來的字體請求信息進行匹配和修改,從而實現(xiàn)個性化定制,其配置文件為/etc/fonts/fonts.conf。這是一個XML文件,可以用任何編輯器編輯。但由于升級原因?qū)е麓宋募菀妆桓采w,所以建議大家把自定義的配置寫在/etc/fonts/local.conf中,這個文件與fonts.conf格式一模一樣下面是它的框架:
    <?xmlversion="1.0"?>
    <!DOCTYPEfontconfig SYSTEM "fonts.dtd">
    <!--/etc/fonts/local.conf file to configure system font access -->
    <fontconfig>

    </fontconfig>
   所有的配置都應該寫在<fontconfig></fontconfig>之間,比如加入上面提到的設置DPI的語句,將變成下面的樣子:
    <?xmlversion="1.0"?>
    <!DOCTYPEfontconfig SYSTEM "fonts.dtd">
    <!--/etc/fonts/local.conf file to configure system font access -->
    <fontconfig>
        <matchtarget="pattern">
                <editname="dpi" mode="assign" >
                       <double>96</double>
                </edit>
        </match>

    </fontconfig>

   我們以后的設置都是在這個文件<fontconfig></fontconfig>之間添加語句。fontconfig配置文件的語法非常靈活和復雜,manfonts-conf可以看到非常詳細的解釋和語法說明,網(wǎng)上據(jù)說有繁體中譯版本,但我一直沒有找到。如有時間,我把它翻譯一下發(fā)到論壇上。

     <matchtarget="font" >
          <editname="rgba" mode="assign">
              <const>rgb</const><!--不同的顯示器取值有所差別-->
          </edit>
    </match>
   這一段是用來啟用液晶顯示器的次像素排列,是液晶顯示器的最佳顯示方式。大家知道,液晶顯示屏的每一個點都是用三原色RGB來合成各種顏色,但各種液晶顯示器的RGB排列方式卻可能不同,因此,取值也有多種:rgb、bgr、vrgb、vbgr,對于CRT顯示器,應關(guān)閉此功能(將值設為none)。如果設置錯誤,對于開AA的字體可能看起來花花綠綠,不太舒服。
    在計算機中我們把字體分為無襯線字體(SanSerif)和(有)襯線字體(Serif)。無襯線字體的筆畫沒有多余修飾,比如黑體、幼圓,英文字體有Arial、Verdana及著名的Tahoma等;而襯線字體的筆畫的起始和結(jié)束通常都有一些裝飾,使字體看起來更美觀,比如宋體、楷體,GeorgiaTimesNew Roman等。
   而對于英文字體,還有等寬字體(monotype)和不等寬字體,故名思義,即英文字符占用寬度是相等的或不相等的。常見的等寬字體有Andalemono、CourierNew等。絕大多數(shù)人都認為不等寬字體具有更好的外觀和可識別性,但在計算機有的環(huán)境中卻不利于排版(比如控制臺中)。
   下面對各類字體提供別名,靠前的字體優(yōu)先級高。當應用程序請求系統(tǒng)中沒有的字體時,將自動用后面的字體替換。
        <alias>
               <family>sans-serif</family>
                <prefer>
                       <family>Arial</family>
                       <family>Verdana</family>
                       <family>Tahoma</family>
                       <family>TrebuchetMS</family>
                       <family>SimSun</family>
                       <family>宋體</family>
                       <family>PMingLiU</family>
                       <family>新細明體</family>
                       <family>STXihei</family>
                       <family>華文細黑</family>
                </prefer>
        </alias>
        <alias>
                <family>serif</family>
                <prefer>
                        <family>TimesNew Roman</family>
                       <family>Georgia</family>
                       <family>SimSun</family>
                       <family>宋體</family>
                       <family>PMingLiU</family>
                       <family>新細明體</family>
                </prefer>
        </alias>
        <alias>
               <family>monospace</family>
                <prefer>
                        <family>CourierNew</family>
                        <family>AndaleMono</family>
                       <family>NSimSun</family>
                       <family>新宋體</family>
                       <family>MingLiU</family>
                       <family>細明體</family>
                </prefer>
        </alias>
   這里把宋體和新細明體也加入無襯線字體類別中了,因為內(nèi)嵌點陣字形的宋體和新細明體,比黑體等無襯線字體會有更好的表現(xiàn)。
   有的網(wǎng)頁使用了如Times,Helvetica等英文字體。原來系統(tǒng)中沒有這些字體,fontconfig將其映射到其它字體,看起來不夠美觀。我們加上下面這段:
        <alias>
                <family>Times</family>
                <prefer>
                        <family>TimesNew Roman</family>
                </prefer>
                <default>
                       <family>serif</family>
                </default>
        </alias>
        <alias>
               <family>Helvetica</family>
                <prefer>
                       <family>Arial</family>
                </prefer>
                <default>
                       <family>sans-serif</family>
                </default>
        </alias>
        <alias>
               <family>Courier</family>
                <prefer>
                        <family>CourierNew</family>
                </prefer>
                <default>
                       <family>monospace</family>
                </default>
        </alias>

   前面已經(jīng)提到了hinting技術(shù),MS對每種字體做了不同的hinting,詳細可以到http://www.microsoft.com/typography/web/fonts/fonts02.htm查看,這里只貼出開頭一小部分。對于表中沒有的字體,MS也提供了工具來查看http://www.microsoft.com/typography/TrueTypeProperty21.mspx

                                       
                        Font                        name
               
                        Smoothing                        and hinting*
               
                        Also                        supplied with
               
                        Smoothed
               
                        Hinted
               
                        Both
               
                        Arial
               
                        0-6
               
                        7-13
               
                        14+
               
                        .Windows
                        .Web                        fonts
               
                        Arial                        Bold
               
                        0-6
               
                        7-8
               
                        9+
               
                        Arial                        Italic
               
                        0-6
               
                        7-13
               
                        14+
               
                        Arial                        Bold Italic
               
                        0-6
               
                        7-8
               
                        9+
               

   表里的smoothed就是指打開AA,hinted是指打開hintingboth當然就指兩者都開,單位是磅(pt)。大家看到,MS對待字體的hinting可不是一棒子打死,不同的字號是區(qū)分開的,正體、粗體、黑體等也是有區(qū)別的。我們這里要做的,就是針對不同的字體單獨設置。
   先來一段總體的設置,對于沒有單獨設置的字形,就采用它了。autohinthinting是兩種不同的字體微調(diào)技術(shù),不建議同時開啟。
        <matchtarget="font" >
                <editname="antialias" mode="assign" >
                       <bool>true</bool>               <!--   改成false即可關(guān)閉AA  -->
                </edit>
                <editname="autohint" mode="assign" >
                       <bool>false</bool>
                </edit>
                <editname="hinting" mode="assign" >
                       <bool>true</bool>              <!--   改成false即可關(guān)閉hinting -->
                </edit>
                <editname="hintstyle" mode="assign" >
                       <const>hintfull</const>     <!--   前面提到的hinting風格,在這里設置-->
                </edit>
        </match>

   表中看出,MS每種字體在0-6號字都只打開了AA,因此這段設置就是把所有MS字體06號開AA,關(guān)閉autohinthinting
        <matchtarget="font" >
                <testname="foundry" qual="any" >
                       <string>microsoft</string>   <!--   只針對MS的字體-->
                </test>
                <testname="size" compare="less_eq" >
                        <int>6</int>
                </test>
                <editname="antialias" mode="assign" >
                       <bool>true</bool>
                </edit>
                <editname="autohint" mode="assign" >
                       <bool>false</bool>
                </edit>
                <editname="hinting" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>
   下面我就通過表中數(shù)據(jù)Arial字體進行設置,其它字體類似(為節(jié)約篇幅,這里代碼寫得很緊湊)。
    <!--Arial正體 -->
        <matchtarget="font" >
                <testname="family" ><string>Arial</string></test>
                <testname="weight" compare="eq"><const>regular</const></test>
                <testname="slant" compare="eq"><const>roman</const></test>
                <testname="size" compare="more_eq"><int>7</int></test>
                <testname="size" compare="less_eq"><int>13</int></test>
                <editname="antialias" mode="assign"><bool>false</bool></edit>
                <editname="autohint" mode="assign"><bool>false</bool></edit>
                <editname="hinting" mode="assign"><bool>true</bool></edit>
                <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
        </match>
    <!--   Arial 粗體  -->
        <matchtarget="font" >
                <testname="family" ><string>Arial</string></test>
                <testname="weight" compare="eq"><const>bold</const></test>
                <testname="slant" compare="eq"><const>roman</const></test>
                <testname="size" compare="more_eq"><int>7</int></test>
                <testname="size" compare="less_eq"><int>8</int></test>
                <editname="antialias" mode="assign"><bool>false</bool></edit>
                <editname="autohint" mode="assign"><bool>false</bool></edit>
                <editname="hinting" mode="assign"><bool>true</bool></edit>
                <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
        </match>
  <!-- Arial 斜體 -->
        <matchtarget="font" >
                <testname="family" ><string>Arial</string></test>
                <testname="weight" compare="eq"><const>regular</const></test>
                <testname="slant" compare="eq"><const>italic</const></test>
                <testname="size" compare="more_eq"><int>7</int></test>
                <testname="size" compare="less_eq"><int>13</int></test>
                <editname="antialias" mode="assign"><bool>false</bool></edit>
                <editname="autohint" mode="assign"><bool>false</bool></edit>
                <editname="hinting" mode="assign"><bool>true</bool></edit>
                <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
        </match>
  <!-- Arial 粗斜體 -->
        <matchtarget="font" >
                <testname="family" ><string>Arial</string></test>
                <testname="weight" compare="eq"><const>bold</const></test>
                <testname="slant" compare="eq"><const>italic</const></test>
                <testname="size" compare="more_eq"><int>7</int></test>
                <testname="size" compare="less_eq"><int>8</int></test>
                <editname="antialias" mode="assign"><bool>false</bool></edit>
                <editname="autohint" mode="assign"><bool>false</bool></edit>
                <editname="hinting" mode="assign"><bool>true</bool></edit>
                <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
        </match>   
   大家也看到,fontconfig可讓某些字體的某些字號開啟或關(guān)閉指定的特性,用法非常靈活,參照manpagemanfonts-conf)。將MS每種字體都照表上的數(shù)據(jù)設置一下,不過工作量也太大了點,各位同胞要是有耐心可以照此修改,把它做完。但是,我也沒發(fā)現(xiàn)這樣做了之后字體變得有多么漂亮,也許是我的審美觀有問題,或者就是太懶。所以我自己的電腦上,還是把所有字體設置一棒子打死(中文字體除外),hinting全開,hintstylehintfull,呵呵!別扁我!

   下面的就是針對中文字體的設置了,有的中文字體由于雙寬度屬性(spacing=dual,對于中文部分幾乎沒影響,但英文部分間隙太寬,不美觀,所以將其調(diào)整為Proportional。
        <matchtarget="font" >
                <testtarget="pattern" name="lang" compare="contains">
                       <string>zh</string>
                       <string>ja</string>
                       <string>ko</string>
                </test>
                <testname="spacing" compare="eq">
                       <const>dual</const>
                </test>
                <editname="spacing" mode="assign" >
                       <const>proportional</const>
                </edit>
                <editname="globaladvance" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>
   前面提到宋體和細明體都內(nèi)嵌了點陣字體,下面我們就爭對有點陣字體的字號單獨關(guān)閉AA,讓其使用字體內(nèi)嵌的位圖字體。
    <!--這里使用前面下載的宋體,它帶了10-19點位圖字體-->
       <matchtarget="font" >
                <testqual="any" name="family" compare="eq" >
                       <string>SimSun</string>
                       <string>宋體</string>
                       <string>NSimSun</string>
                       <string>新宋體</string>
                </test>
                <testname="pixelsize" compare="more_eq" >
                        <int>10</int>
                </test>
                <testname="pixelsize" compare="less_eq" >
                        <int>19</int>
                </test>
                <editname="antialias" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>
   <!--細明體和新細明體,帶有11,12,13,1516,20點位圖字體-->
        <matchtarget="font" >
                <testqual="any" name="family" compare="eq" >
                       <string>MingLiU</string>
                       <string>細明體</string>
                       <string>PMingLiU</string>
                       <string>新細明體</string>
                </test>
                <testname="pixelsize" compare="more_eq" >
                        <int>11</int>
                </test>
                <testname="pixelsize" compare="less_eq" >
                        <int>13</int>
                </test>
                <editname="antialias" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>
        <matchtarget="font" >
                <testqual="any" name="family" compare="eq" >
                       <string>MingLiU</string>
                       <string>細明體</string>
                       <string>PMingLiU</string>
                       <string>新細明體</string>
                </test>
                <testname="pixelsize" compare="more_eq" >
                        <int>15</int>
                </test>
                <testname="pixelsize" compare="less_eq" >
                        <int>16</int>
                </test>
                <editname="antialias" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>
        <matchtarget="font" >
                <testqual="any" name="family" compare="eq" >
                       <string>MingLiU</string>
                       <string>細明體</string>
                       <string>PMingLiU</string>
                       <string>新細明體</string>
                </test>
                <testname="pixelsize" compare="eq" >
                        <int>20</int>
                </test>
                <editname="antialias" mode="assign" >
                       <bool>false</bool>
                </edit>
        </match>

   如果你覺得宋體的英文部分不美觀,可以使用其它英文字體替換掉,也就是中英文字體混用的問題,在Firefox中可以生效。
      <matchtarget="pattern">
                <testname="family" qual="any" >
                       <string>SimSun</string>
                       <string>宋體</string>
                       <string>PMingLiU</string>
                       <string>新細明體</string>
                </test>
                <editname="family" mode="prepend" binding="strong">
                       <string>Arial</string>   <!--  將英文不等寬字體替換為Arial-->
                </edit>
        </match>
        <matchtarget="pattern">
                <testname="family" qual="any" >
                       <string>NSimSun</string>
                       <string>新宋體</string>
                       <string>MingLiU</string>
                       <string>細明體</string>
                </test>
                <editname="family" mode="prepend" binding="strong">
                        <string>CourierNew</string>   <!-- 英文等寬字體替換為CourierNew -->
                </edit>
        </match>
    我將英文不等寬字體替換為Arial,等寬字體替換為CourierNew,如果你更喜歡其它英文字體,在上面注釋處直接更改就可以了。

六、關(guān)于字體的修改
   關(guān)于fontconfig配置文件的寫法我們就寫到這里了,但其配置靈活,能實現(xiàn)的遠不只這里說提到的功能,更多的寫法還需要大家去發(fā)掘。由于Linux系統(tǒng)中GUI應用程序有很多種,如GTK1程序,GTK2Qt程序,有的支持fontconfig,有的不支持,還有一些特殊程序擁有自己的畫字引擎,所以前面提到的配置不可能在所有的程序中生效。比如剛才提到的字體替換技術(shù)在Qt程序中好像不起作用,由于宋體內(nèi)嵌的位圖字體沒有包括英文部分點陣,導致不開AA的情況下英文部分顯示丑陋,但如果開AA,小號中文字體顯示又不理想。于是我們就會想是否可以為其加上英文部分的點陣,讓宋體在任何地方都有較好的顯示效果,這能不能行得通呢?答案是肯定的。下面就為大家介紹如何使用工具來為宋體加上英文部分點陣。
    工具準備:
   fontforge,可直接對點陣字體或矢量字形進行編輯,這是我們的主要工具。工作平臺:linux。下載地址:http://fontforge./
    sbit32,工作平臺:windows。下載地址:http://www./nuke/modules/Forums/files/sbit.zip
   ttctool,工作平臺:windows下載地址:http://www./nuke/modules/Forums/files/TTCTOOL_213.zip

   ttc字體是由多個ttf字體合并而來的。fontforge可以直接打開ttc字體,但當我們打開simsun.ttc時,發(fā)現(xiàn)其讀不到13、1518點陣位圖字體,同樣打開fromnuaa兄制作的那款宋體也有同樣的問題。這并不是因為宋體中沒有包含這三種位圖點陣,而是因為這三種點陣的flag=0(正常應為1)的緣故。解決方法是使用sbit32分離出這出這三種點陣信息,將它們從原字體中刪除后再加入,就可以使其flag變?yōu)?/font>1,從而可以用fontforge打開編輯。但sbit32不支持ttc文件,因此我們需要先使用ttctoolttc字體分解為ttf字體。
    1.分割ttc字體為兩個ttf字體
   解壓TTCTOOL_213.zip,打開windows命令行,進入解壓目錄操作
    D:\>cdTTCTOOL_213
    D:\TTCTOOL_213>breakttc simsun.ttc
   這里我們使用fromnuaa兄制作的這款宋體。這步操作完成之后生成兩個ttf字體,font000.ttffont001.ttf,其中一個是宋體,另一個是新宋體。由于宋體和新宋體除了英文部分是否是等寬的之外,其它一模一樣,以后我們就只對宋體進行操作,去掉新宋體。
    2.flag=0的那部分點陣信息保存為單獨的文件
   解壓sbit32,同樣我們也打開windows命令行,進入解壓目錄,將剛才生成的宋體(ttf)考貝到這里來,還是將字體文件名改為simsun.ttf吧。
    D:\sbit>sbit32-v -i  simsun.ttf
   這條命令將看到字體的詳細信息,我們主要是看字體包含那些字號的點陣和它的flag。這里看到13、15、18點陣字體的flag=0。
   Sbit目錄中有一個文件sample.met,用記事本打開它,可以看到其中只有幾個字符ppemxx,我們將其改為ppem13,然后保存。
    D:sbit>sbit32-x simsun.ttf sample.met 13.bdf
   這條命令就將simsun.ttf文件中內(nèi)嵌的13點位圖點陣保存為13.bdf了。我們再修改sample.met文件為ppem15,然后用sbit32-x simsun.ttf sample.met 15.bdf15點位圖字體保存下來了,同理,把18點位圖字體保存下來。
    3.刪除simsun.ttf字體中內(nèi)嵌的flag=0的點陣字體
    sample.met文件的內(nèi)容改為ppem13,再用這個命令得到一個不包含13點位圖字體的simsun1.ttf
    D:\sbit>sbit32-d simsun.ttf sample.met simsun1.ttf
   再修改sample.met內(nèi)容為ppem15,用下面這個命令得到一個不包含1315點位圖字體的simsun2.ttf
    D:\sbit>sbit32-d simsun1.ttf sample.met simsun2.ttf
   同樣的方法,得到一個不包含13、1518點位圖字體的simsun3.ttf
    4.將剛才保存的bdf文件全部加入simsun3.ttf
    修改sample.met文件為ppem13,運行下面這條命令得到simsun4.ttf,包含了13點位圖字體。
    D:\sbit>sbit32-a simsun3.ttf 13.bdf sample.met simsun4.ttf
   同樣的方法,可由simsun4.ttf得到simsun5.ttf,再得到包含了1019所有位圖字體的simsun6.ttf。我們迂回地做了這么多工作得到的simsun6.ttf,其實就是把13、1518點位圖字體的flag變?yōu)榱?/font>1,其它與simsun.ttf一模一樣。有的讀者可能會問,直接把第2步生成的bdf文件導入fontforge編輯不就行了嗎?憒憾的是fontforge并不能正常地打開這些bdf文件。以下的工作,我們就用fontforge打開simsun6.ttf來添加英文點陣了。
    5.使用fontforge編輯字體。
   fontforge的安裝是非常簡單的,對于Fedora,除了在上面給出的地址下載安裝外,還可以使用yuminstallfontforge命令自動安裝。在終端下輸入fontforge開始運行,你可能覺得界面也太丑了,不過還好是中文的。開始運行時就提示你打開一個字體,選擇剛才生成的simsun6.ttf,等會兒會提示你載入位圖字體,這時你應該可以看到10-1910種位圖字體(如果少了幾種,那么剛才的工作就沒做好),點[選擇全部],再點[是]打開字體。主界面以方格的形式顯示每個字的形狀。
   點[查看]菜單,菜單最下面可看到10-19十項菜單,點選它們主界面就切換到點陣位圖字體查看狀態(tài),雙擊其中一個字,就可對這個字進行點陣信息編輯。我們的目標是對添加英文字體位圖點陣,你可以手動一個個編輯,也可以將其它英文位圖字體導入,這是一項十分繁瑣的工作,不過不用擔心,我已經(jīng)幫大家做好了。
   firefox瀏覽網(wǎng)頁時,你可能發(fā)現(xiàn)文字總是緊貼著下劃線,十分不舒服,不過我們可以下移下劃線的位置。點[基礎]->[字體信息],彈出字體信息對話框,你可以對字體的很多信息進行查看和修改,但是建議不要亂動里面的信息。點左邊的[一般],在右邊找到[下劃線位置],其默認為-22,把它改為-50,點確定,如果還出現(xiàn)提示信息,仍然點確定。
   最后,點[文件]->[生成字體],在生成字體對話框中,為新字體取一個名字,下面分別選擇TrueTypeTTF/OTF,點[確定],出現(xiàn)dpi選項,選[估計]就可以了。需要注意的是如果使用了前面字體替換技術(shù),這里的下劃線設置就不起作用!不過由于現(xiàn)在我們已經(jīng)對字體加入了英文位圖點陣,也就不在擔心英文顯示太丑,所以在我的設置中沒有使用字體替換技術(shù)。
   把這個新字體考到字體目錄中,刪掉原來的宋體,重啟xfs服務,你會看到Linux下的宋體不管是中文還是英文,都已經(jīng)和windows下的樣子沒有區(qū)別!

    (全文完)

    關(guān)于作者
    姓名:茍廷勇
    論壇IDwotooa
    MSNicecard@hotmail.com
   論壇ID的由來:其實這也和Linux有關(guān)。Ubuntu7.04剛發(fā)布時,我就去下載回來體驗,它給我的第一感覺就是太漂亮了,因此決定由Fedora轉(zhuǎn)向Ubuntu,并且開始向我的朋友灌輸Ubuntu的好,才向朋友灌輸?shù)倪^程中,發(fā)現(xiàn)我將ubuntu念成了“我不吐”!但用了之后才發(fā)現(xiàn),我RedHat/Fedora的功底在Ubuntu里都用不上,很多以前用得很熟悉的命令都不能用,常見的配置文件也找不到,以前可以輕松搞定的事在這里做不了,我得重新學過!過了一個多月,實在忍受不了,我終于“吐了”!“我吐啊”(wotooa)這個名字就這么出來了!這個名字實在有點不雅,不過既然與Linux有關(guān),還是暫時留著吧!
    我又換回了久違的Fedora,狠下心來做美化,于是就有了這篇文章,呵呵

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多