修改TTF字体美化显示效果【原文转自:http://www.linuxfans.org/】
準備
工具:fontforge,原名pfaedit,主頁:http://fontforge.sourceforge.net/
原料:兩款中文字體。一款作為“常規”字體顯示,一款作為“粗體”顯示。兩款字體并不一定是同一種,只要你自己看著舒服就行。但是粗體比常規粗是必須的。當然,如果你不這么做我也沒辦法。
優點:不用對現有字體引擎打補丁、做修改。
缺點:比較麻煩;有版權問題;比較配套的字體不好找。
附言:經wxz8指點后,添加了斜體的制作方法。
備注:Windows的Arial、Courier、Times、Verdana等都是通過定義4個相關字體實現的粗斜體,而不是用算法.這樣的效果應該不錯。
我這里以方正圓體為例。
目標:以方正準圓作為“常規”字體顯示,方正粗圓作為“粗體”顯示,統一改為FZYuanTi。
沒用中文名的原因是在不打firefly( http://firefly.idv.tw/setfont-xft/ )補丁的情況下無法顯示中文字體名。
制作常規體
1. 安裝完成fontforge后,在終端里輸入fontforge運行,在彈出的界面里載入方正準圓(fzy3k.ttf)。
2. 點擊菜單欄的Element--Font Info;
Fontname改為FZYuanTi_JT(這一步的修改將顯示為PostScript名。右鍵--屬性,Meta信息就可看到);
Family Name改為FZYuanTi;
Name For Humans改為FZYuanTi(這一步不改也可以,但為了統一我還是改了);
Weight改為Medium(MS帶的字體這里均為Book,你不改也可以);
關鍵是Family Name應該和你將用的“粗體”統一,名字可以任意。我用FZYuanTi。
3. 切換到TTF Values選項卡
Weight Class改為500 Medium(MS帶的字體這里均為400 Book,你不改也可以)。
4. 切換到Panose選項卡
Weight改為Medium。
5. 切換到TTF Names選項卡
在下面第二個選框內選擇Chinese(PRC)zh_CN;
改變第一個選框內的內容為Family,此時將下面輸入框內的內容改為FZYuanTi;
改變第一個選框內的內容為Fullname,此時將下面輸入框內的內容改為FZYuanTi;
改變第一個選框內的內容為UniqueID,此時將下面輸入框內的內容改為Founder:FZYuanTi Regular;
然后將下面第二個選框內選擇English(US)en_US(這里字體所支持的語言會用不同顏色顯示,直觀明了、方便選擇。如果我不是色盲的話應該是綠色的);
做與Chinese(PRC)zh_CN類似的修改,即修改Family、Fullname、UniqueID三部分。
6. 點擊OK關閉對話框后,如果彈出窗口提示不匹配,詢問是否改變的話,點擊Retain All,不做改變。
7. 選擇File--Generate Fonts,選擇True Type,點擊Save后生成字體,文件名任意,我取為FZYuanTi_regular.ttf。如果彈出窗口提示什么Em Size的話不用理會,點擊yes確定。
制作粗體
1. 安裝完成fontforge后,在終端里輸入fontforge運行,在彈出的界面里載入方正粗圓(fzy4k.ttf)。
2. 點擊菜單欄的Element--Font Info;
Fontname改為FZYuanTi-Bold_JT(這一步的修改將顯示為PostScript名。右鍵--屬性,Meta信息就可看到);
Family Name改為FZYuanTi;
Name For Humans改為FZYuanTi Bold(這一步不改也可以,但為了統一我還是改了);
Weight改為Bold;
關鍵是Family Name應該和你將用的“常規”統一,名字可以任意。我用FZYuanTi。
3. 切換到TTF Values選項卡
Weight Class改為700 Bold。
4. 切換到Panose選項卡
Weight改為Bold。
5. 切換到TTF Names選項卡
在下面第二個選框內選擇Chinese(PRC)zh_CN;
確認第一個選框內的內容為Styles(SubFamily),此時將下面輸入框內的內容改為Bold;
改變第一個選框內的內容為Family,此時將下面輸入框內的內容改為FZYuanTi;
改變第一個選框內的內容為Fullname,此時將下面輸入框內的內容改為FZYuanTi Bold;
改變第一個選框內的內容為UniqueID,此時將下面輸入框內的內容改為Founder:FZYuanTi Bold;
然后將下面第二個選框內選擇English(US)en_US(這里字體所支持的語言會用不同顏色顯示,直觀明了、方便選擇);
做與Chinese(PRC)zh_CN類似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 點擊OK關閉對話框后,如果彈出窗口提示不匹配,詢問是否改變的話,點擊Retain All,不做改變。
7. 選擇File--Generate Fonts,選擇True Type,點擊Save后生成字體,文件名任意,我取為FZYuanTi_bold.ttf。如果彈出窗口提示什么Em Size的話不用理會,點擊yes確定。
制作斜體
1. 安裝完成fontforge后,在終端里輸入fontforge運行,在彈出的界面里載入剛才修改過的常規字體(FZYuanTi_regular.ttf)。
2. 點擊菜單欄的Element--Font Info;
Fontname改為FZYuanTi-Italic_JT(這一步的修改將顯示為PostScript名。右鍵--屬性,Meta信息就可看到);
Family Name改為FZYuanTi;
Name For Humans改為FZYuanTi Italic(這一步不改也可以,但為了統一我還是改了);
Weight改為Medium(MS帶的字體這里均為Book,你不改也可以);
關鍵是Family Name應該和你將用的“粗體”統一,名字可以任意。我用FZYuanTi。
3. 切換到TTF Values選項卡
Weight Class改為500 Medium(MS帶的字體這里均為400 Book,你不改也可以)。
4. 切換到Panose選項卡
Weight改為Medium。
5. 切換到TTF Names選項卡
在下面第二個選框內選擇Chinese(PRC)zh_CN;
確認第一個選框內的內容為Styles(SubFamily),此時將下面輸入框內的內容改為Italic;
改變第一個選框內的內容為Family,此時將下面輸入框內的內容改為FZYuanTi;
改變第一個選框內的內容為Fullname,此時將下面輸入框內的內容改為FZYuanTi Italic;
改變第一個選框內的內容為UniqueID,此時將下面輸入框內的內容改為Founder:FZYuanTi Regular Italic;
然后將下面第二個選框內選擇English(US)en_US(這里字體所支持的語言會用不同顏色顯示,直觀明了、方便選擇);
做與Chinese(PRC)zh_CN類似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 切換到General選項卡,在“Italic Angle:”后輸入12
7. 點擊OK關閉對話框后,如果彈出窗口提示不匹配,詢問是否改變的話,點擊Retain All,不做改變。
8. 選擇Edit--Select--Select All,然后執行Element--Transform。
在新彈出的對話框中改變第二個選框內的內容為Skew,在將其后的數值改為12(數值可根據你的視覺需要任意輸入,Windows自帶的英文字體多為10、12、13、16。你可以先單獨選中一個字體Skew一下試試看傾斜程度是否合適)。點擊OK確定。
9. 在彈出的警告對話框中點擊OK確定,如果彈出什么錯誤提示的話不用理會,一路回車。完成后會看到字體已變為斜體。接著按照剛才的警告執行Element--Add Extrema。
最后選擇File--Generate Fonts,選擇True Type,點擊Save后生成字體,文件名可任意。我取為FZYuanTi_Italic.ttf。如果彈出窗口提示什么Em Size的話不用理會,點擊yes確定。
制作粗斜體
1. 安裝完成fontforge后,在終端里輸入fontforge運行,在彈出的界面里載入剛才修改過的粗體(FZYuanTi_bold.ttf)。
2. 點擊菜單欄的Element--Font Info;
Fontname改為FZYuanTi-BoldItalic_JT(這一步的修改將顯示為PostScript名。右鍵--屬性,Meta信息就可看到);
Family Name改為FZYuanTi;
Name For Humans改為FZYuanTi Bold Italic(這一步不改也可以,但為了統一我還是改了);
Weight改為Bold;
關鍵是Family Name應該和你將用的“粗體”統一,名字可以任意。我用FZYuanTi。
3. 切換到TTF Values選項卡
Weight Class改為700 Bold。
4. 切換到Panose選項卡
Weight改為Bold。
5. 切換到TTF Names選項卡
在下面第二個選框內選擇Chinese(PRC)zh_CN;
確認第一個選框內的內容為Styles(SubFamily),此時將下面輸入框內的內容改為Bold Italic;
改變第一個選框內的內容為Family,此時將下面輸入框內的內容改為FZYuanTi;
改變第一個選框內的內容為Fullname,此時將下面輸入框內的內容改為FZYuanTi Bold Italic;
改變第一個選框內的內容為UniqueID,此時將下面輸入框內的內容改為Founder:FZYuanTi Bold Italic;
然后將下面第二個選框內選擇English(US)en_US(這里字體所支持的語言會用不同顏色顯示,直觀明了、方便選擇);
做與Chinese(PRC)zh_CN類似的修改,即修改Styles(SubFamily)、Family、Fullname、UniqueID四部分。
6. 切換到General選項卡,在“Italic Angle:”后輸入12
7. 點擊OK關閉對話框后,如果彈出窗口提示不匹配,詢問是否改變的話,點擊Retain All,不做改變。
8. 選擇Edit--Select--Select All,然后執行Element--Transform。
在新彈出的對話框中改變第二個選框內的內容為Skew,在將其后的數值改為12(數值可根據你的視覺需要任意輸入,Windows自帶的英文字體多為10、12、13、16。你可以先單獨選中一個字體Skew一下試試看傾斜程度是否合適)。點擊OK確定。
9. 在彈出的警告對話框中點擊OK確定,如果彈出什么錯誤提示的話不用理會,一路回車。完成后會看到字體已變為粗斜體。接著按照剛才的警告執行Element--Add Extrema。
最后選擇File--Generate Fonts,選擇True Type,點擊Save后生成字體,文件名可任意。我取為FZYuanTi_bold_Italic.ttf。如果彈出窗口提示什么Em Size的話不用理會,點擊yes確定。
安裝字體
1. 在/usr/share/fonts目錄下新建local目錄,把剛才制作好的四個字體復制到/usr/share/fonts/local下。
2. 執行
# ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale # cp /usr/share/fonts/local/fonts.scale /usr/share/fonts/local/fonts.dir3. 更改/etc/X11/XF86Config(如果你用的X是xorg的話就應改修改xorg.conf),在字體字段加入一行
FontPath "/usr/share/fonts/local"類似于
RgbPath "/usr/X11R6/lib/X11/rgb" FontPath "/usr/share/fonts/local" FontPath "unix/:7100"4. 更改/etc/X11/fs/config,在查找字體字段增加一行
/usr/share/fonts/local,類似于
catalogue = /usr/share/fonts/zh_CN/TrueType, /usr/share/fonts/local, /usr/X11R6/lib/X11/fonts/korean,5. 編輯/etc/fonts/fonts.conf,在每個字體字段最前面加入
<family>FZYuanTi</family>類似于
<alias> <family>FZYuanTi</family> <family>Bitstream Vera Serif</family> <family>Times</family> <family>Times New Roman</family> <family>Nimbus Roman No9 L</family> <family>Luxi Serif</family> <family>Kochi Mincho</family> <family>AR PL SungtiL GB</family> <family>AR PL Mingti2L Big5</family> <family>Baekmuk Batang</family> <default><family>serif</family></default> </alias>6. 編輯/etc/gtk-2.0/gtkrc(這一步是為在KDE下GTK2的程序設置字體。如果你用的是gnome就不用修改,否則字體設置會不起作用),加入
style "user-font" { font_name="FZYuanTi 12" } widget_class "*" style "user-font"7. 注銷或者執行init 3退出X。 8. 執行
# fc-cache -fv # /etc/init.d/xfs restart9. startx或者init 5進入X后,在字體設置里選擇FZYuanTi,大小為12即可。
使用替換字體
往往一款中文字體里的英文字符不是很好看,所以為達到更好的顯示效果就會使用替換字體(顯示中文時使用指定的中文字體,遇到英文時就使用另一款英文字體替換)。這也可以解決中文字體丟字符的問題(有時要顯示的字符沒有包含在這款中文字體里,此時就可以用包含這些字符的字體來替換)例如常用的Tahoma替換Simsun。
方正圓體的英文部分過于緊湊,不好看。我個人覺得Bitstream Vera Sans與其搭配很好(當然你也可以用Windows自帶的Arial)。
1. 編輯/etc/fonts/fonts.conf,把Bitstream Vera Sans (Arial)加在FZYuanTi前,類似
<alias> <family>Bitstream Vera Sans</family> <family>FZYuanTi</family> <family>Bitstream Vera Serif</family> <family>Times</family> <family>Times New Roman</family> <family>Nimbus Roman No9 L</family> <family>Luxi Serif</family> <family>Kochi Mincho</family> <family>AR PL SungtiL GB</family> <family>AR PL Mingti2L Big5</family> <family>Baekmuk Batang</family> <default><family>serif</family></default> </alias>2. 編輯/etc/gtk-2.0/gtkrc(這一步是為在KDE下GTK2的程序設置字體。如果你用的是gnome就不用修改,否則字體設置會不起作用)。加入
style "user-font" { font_name="Bitstream Vera Sans,FZYuanTi 12" } widget_class "*" style "user-font"3. 運行qtconfig,選擇Fonts選項卡,在Font Substitution里選擇Bitstream Vera SansFamily,然后在下面的Substitution Family里把FZYuanTi加入,保存退出。
4. 在字體設置里選擇Bitstream Vera Sans。
進一步美化字體
替換字符
到以上為止,使用了替換字體后,顯示效果應該已經可以算不錯了。如果你覺得不夠滿意,不想用那么多字體的話,可以直接修改字體,用一款英文字體替換掉中文字體里的相同部分。
還以上面的方正圓體和Bitstream Vera Sans為例。用Bitstream Vera Sans替換掉與方正圓體里相同的字符,如果圓體里沒有某個字符的話就直接用Bitstream Vera Sans補足(如果你覺得Bitstream Vera Sans太粗、字體間距大的話也可以用Windows的Arial甚至是Tahoma)。
注意字體的搭配,斜體配斜體,粗體配粗體。下面以粗斜體為例。
運行fontforge,分別打開/usr/share/fonts/bitstream-vera/VeraBI.ttf(Bitstream Vera Sans的粗斜體)和剛才做好的FZYuanTi_bold_Italic.ttf;
在Bitstream Vera Sans的窗口中,選擇View--Compacted View,點擊菜單欄的Element--Font Info--Encoding可以看到總共有268個字符,不算多,慢慢來還可以接受。如果太多的話,我勸你還是放棄吧,除非你想鍛煉耐心;
點擊菜單欄的Element--Font Info--Encoded View,把瀏覽方式改回去(生成字體以前一定要改回);
切換到方正圓體的Element--Font Info--General選項卡把Em Size改為2048,即與Bitstream Vera Sans一樣(兩款字體的Em Size一定要一樣,否則最后生成的字體會大小不一)。點擊OK后,等待轉換完成;
然后在方正圓體里用鼠標選中與Bitstream Vera Sans重復的字符(可以拖動,多選),右鍵,Clear清除,再用復制、粘貼把Bitstream Vera Sans的字符都貼過來即可(這一點說起來最輕松,但是做起來卻最浪費時間)。有的字符在方正圓體沒有包括,直接貼過來就行了。可以用View--Next Defined Char直接轉到下一個字符,否則找起來很麻煩;
可能是改的字體的問題,別人復制都沒問題,但是在我改的這兩個字體里,直接復制后部分字符會變形,所以使用了合并功能(你做字體的時候如果不能復制粘貼的話,可以試試合并);
把方正圓體里與Bitstream Vera Sans重復的字符都清除后,選擇Element--Merge Fonts,在Merge Fonts窗口中選擇Bitstream Vera Sans。完成后,File--Generate Fonts生成字體即可;
合并字體時,只會合并原字體(這里是方正圓體)里沒有包含的字符,而不會覆蓋已有的字符,所以要先清除方正圓體里與Bitstream Vera Sans重復的字符后再合并;
當然你也可以用Bitstream Vera Sans做基礎把方正圓體合并進來,但這時你要修改的字體信息就多了,我不建議這樣做。
此時就不用修改配置文件替換字體了,都使用FZYuanTi就行了。
導入點陣(位圖)字體
有人可能喜歡用Simsun,覺得小字體時中文清晰銳利。那是因為Simsun包含了3個點陣字體。我們把它提取出來。
運行fontforge,在裝入位圖字體對話框中Select All裝入。File--Generate Fonts,在兩個下拉列表里分別選擇No Outline Font和BDF即可生成bdf格式的位圖字體。
得到點陣字體后,就可以把他們加入自己想要的字體里。用fontforge打開任一款矢量字體(ttf),File--Import,格式選BDF。導入后File--Generate Fonts,分別選擇True Type和In TTF生成后就是包含點陣字的ttf。當系統顯示時,如果大小與內嵌的點陣字相同的話會優先使用點陣字體顯示。
另:Windows里除了Simsun以外Mingliu也包含了6個點陣字體,還有gb18030的Simsun。
Starsuite 7.0的soui.ttf里能發現11~21pixel的點陣字。
unisun里包含了6個點陣。其中Simsun的點陣沒有latin1部分,所以在顯示時會使用ttf中的英文,造成效果不好。
但有些字體包含的點陣信息是fontforge讀不出的,各位試試東文宋體就知道了。9~12號格外清晰銳利,無論AA與否。而且fontforge打開后直接生成字體會小好幾M。
在某些方正宋體18030和方正黑體18030也含點陣但是一樣讀不出,用gnome-font-viewer就很明顯能看到了,特別是方正黑體。
文筆有限再加上才疏學淺,多有不當之處,還希望大家多多指正。包括錯別字。
作者拾遺
方正細圓+方正準圓是一對比較合適的字體。如果你覺得字體有些發虛模糊的話,可以用方正準圓+方正粗圓搭配。有一點要說一下,圓體在大字體時使用AA會很好看,但是在小字體(例如經常使用的9、10號字)時效果就不怎么好了。我覺得準圓(粗圓)比細圓(準圓)粗的不夠,顯示粗體的時候,只感覺到黑感覺不到粗。
細圓+粗圓、方正黑體+方正大黑、東文黑體+東文粗黑、華文宋體+華文中宋搭配也都不錯。
至今沒找到能做宋體粗體的字體,希望能有人給出好建議;如有好的字體搭配建議也盡管共享出來。多謝。
效果截圖
總結
以上是生活随笔為你收集整理的修改TTF字体美化显示效果【原文转自:http://www.linuxfans.org/】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱情顾问岗,雷哥成功拿到了offer
- 下一篇: 实验 6 文件打包与解压缩