TTF字體:
TrueType Font ,由Apple和微軟公司合作推出的文字文件格式,,一個(gè)TTF字符由大量多邊形組成,,每一個(gè)多邊形由一個(gè)名叫TTPOLYGONHEADER的數(shù)據(jù)結(jié)構(gòu)開(kāi)始,,跟在TTPOLYGONHEADER后面的是一系列的TTPOLYCURVE數(shù)據(jù)結(jié)構(gòu)體,。多邊形的頂點(diǎn)是POINTFX類型的數(shù)據(jù)結(jié)構(gòu)點(diǎn)。
字體是如何保證對(duì)齊的呢,?原來(lái)在字庫(kù)內(nèi)部,,有一個(gè)基準(zhǔn)線,就好像信紙的虛線,,用來(lái)水平方向?qū)R的,,同樣,也有個(gè)垂直方向的基準(zhǔn)線,。每個(gè)字都有上浮和下沉的高度,,這也是該字的最上和最下的點(diǎn)所處的位置。
矢量字在不同字號(hào)下,,根據(jù)點(diǎn)陣尺寸,,顯示的精細(xì)程度也不一樣。我們這里將“8”放大了看,,在小字號(hào)和大字號(hào)下的效果,。
在不同的字號(hào)下,根據(jù)最簡(jiǎn)單的縮放原理,將所有的點(diǎn)縮放到合適的位置,,再確定曲線,。這時(shí)候,一條邊就占據(jù)不了整列像素,,或者一條邊壓在了兩列像素的中間,,這樣就造成了灰色的線條。而這并不是我們想要的效果,,Photoshop通過(guò)USM銳化濾鏡,將虛邊得以逐步清晰,,以達(dá)到所要的矢量字,。
蘋(píng)果系統(tǒng)通過(guò)調(diào)整整體點(diǎn)陣的位置,將所有的點(diǎn)適當(dāng)偏移半個(gè)像素以內(nèi)的位置,,可以實(shí)現(xiàn)較為清晰的字體,。如果在關(guān)閉了消除鋸齒方式,則有些邊線由于占據(jù)不了半個(gè)像素,,而不能夠顯示,,這就形成了所謂的缺邊或者缺筆劃。
有些軟件,,比如AdobeAcrobat,,通過(guò)一種較為復(fù)雜算法,以實(shí)現(xiàn)矢量字的清晰,。將某些關(guān)聯(lián)的點(diǎn)作為一個(gè)segment,,并且局部偏移到鄰近的整數(shù)位,而其他部分不動(dòng),。這種方法目前較為流行,,可以實(shí)現(xiàn)比蘋(píng)果和ps還要清晰的矢量效果。
為什么我們通??吹降凝X條文字這么清晰呢
微軟的TTF為了保證小字號(hào)下的清晰,,可謂是用盡了方法。首先,,在龐大的字庫(kù),,內(nèi)置了數(shù)個(gè)字號(hào)的點(diǎn)陣字,接著才是矢量字,。比如宋體,,內(nèi)置了12、14,、16,、18等幾個(gè)點(diǎn)陣字庫(kù),在這些之外才使用矢量字庫(kù)來(lái)渲染。這也是為什么一個(gè)TTF文件要幾兆甚至幾十兆的容量,,不過(guò)內(nèi)嵌的點(diǎn)陣字越多,,在不同字號(hào)下實(shí)現(xiàn)的效果自然越好。別小看了這些點(diǎn)陣字,,每一個(gè)都是平面設(shè)計(jì)師在工具上畫(huà)的,,并非由軟件生成。唉,,可憐的設(shè)計(jì)師啊~~~~~~
(ps:Android自帶字庫(kù)最大就5M,,是矢量字庫(kù))。
不過(guò),,有個(gè)特例,。比如Arial字體,內(nèi)部全是矢量字,,但各種尺寸下都是這么清晰,。為什么呢?
原來(lái),,微軟在字庫(kù)中加入了解釋程序,,interpreter,一種專門(mén)用于字庫(kù)渲染的腳本命令,。在不同的字號(hào)下,,都有相應(yīng)的語(yǔ)句,將矢量字得以最清晰化,。這是一種更復(fù)雜的技術(shù),,微軟也覺(jué)得不能廣泛使用,所以只有在部分的英文字庫(kù)中才有,,而且該腳本對(duì)應(yīng)每個(gè)字都有一段代碼,,容量非常大,用在漢字上幾乎是不可能,,除非是整個(gè)文字不多于100個(gè)才能使用,。
interpreter就是這么神奇,他也是目前最好的技術(shù)之一,,能夠?qū)⑹噶孔咒秩镜暮忘c(diǎn)陣字一樣的清晰,。他將某些邊線的距離拉開(kāi),而將另一部分收縮,,總之是按照人的想法來(lái)做的,,這也是編好的程序。
矢量字體的終極技術(shù)
在1998年的時(shí)候,,微軟聲稱發(fā)明了一種新的技術(shù),,能在LCD上將矢量字體的清晰度提高到300%,。而后,出現(xiàn)了名為Microsoft Reader的軟件,。Adobe也不甘示弱,,隨即在Acrobat 4中對(duì)CoolType進(jìn)行了支持,而Linux的FreeType庫(kù)也開(kāi)始支持次像素平滑,。從實(shí)際效果來(lái)看,,Acrobat做的最好,最靈活,,而微軟的缺少適當(dāng)?shù)恼{(diào)節(jié)工具,,Linux的次像素平滑簡(jiǎn)直就是垃圾,照虎畫(huà)貓,。(ps:所以Ubuntu的中文會(huì)顯示的那么別扭,,android基于linux但Google進(jìn)行了優(yōu)化,文字顯示效果得到質(zhì)的提升),。
ClearType使用彩色來(lái)描邊,顯示對(duì)比度越是強(qiáng)的文字,,比如白底黑字或者黑底白字,,都是最清晰的。其實(shí),,理論上ClearType能夠?qū)@示精度提到到300%,,但實(shí)際上只能達(dá)到200%左右。
一般來(lái)說(shuō),,液晶顯示器的點(diǎn)陣分布都非常均勻,,每個(gè)點(diǎn)都是由紅綠藍(lán)3色排列而成。我們通常要顯示一個(gè)白色,,需要將紅綠藍(lán)都點(diǎn)亮,,而黑色是都不顯示。ClearType將點(diǎn)的概念再次擴(kuò)展,,把鄰近的兩個(gè)點(diǎn)3色混淆,,借前一個(gè)點(diǎn)的顏色而忽略后一點(diǎn)的某種顏色。這樣,,就可以把傳統(tǒng)的一個(gè)點(diǎn)的最小單位擴(kuò)展到1/3個(gè)點(diǎn)的單位,。
在使用ClearType技術(shù)后,原來(lái)的字體渲染將更加清晰,,當(dāng)然,,只限于LCD顯示器,CRT會(huì)更加模糊,。ClearType還有一個(gè)關(guān)鍵的技術(shù),,就是Linux的次像素平滑沒(méi)有學(xué)去的地方,,一定要考慮到紅綠藍(lán)的顏色亮度平衡。一般來(lái)說(shuō),,綠色的亮度最高,,而藍(lán)色的最低,所以我們要在顯示綠色的時(shí)候加點(diǎn)紅色和藍(lán)色來(lái)調(diào)低亮度,,而顯示藍(lán)色的時(shí)候要加入綠色和紅色來(lái)增加亮度,。這種做法也可以使邊界的彩邊不是那么明顯,看起來(lái)更像是黑色的字,。不過(guò),,這種做法使得原本可以提高顯示精細(xì)程度到300%的技術(shù),降低了許多,,不過(guò)還是要高于200%,。
以上資料得出結(jié)論:
1.字體顯示不是越大越清晰,當(dāng)字體像素與設(shè)備物理像素是點(diǎn)對(duì)點(diǎn)(或者1比N,,N為整數(shù)時(shí)最清晰),。
2.在一些圖形處理軟件中比如Photoshop,文字都會(huì)經(jīng)過(guò)算法優(yōu)化,,視覺(jué)上會(huì)比手機(jī)上更清晰,,耐看一點(diǎn)。這個(gè)差異性是客觀存在的,。
3.手機(jī)和電腦屏幕的物理像素大小和發(fā)光排列原理都不盡相同,,所以呈現(xiàn)的細(xì)節(jié)特點(diǎn),色彩的表現(xiàn)力和沖擊力都不一樣,,最終效果還是要以特定設(shè)備為準(zhǔn),。
延伸篇:
為了提升文字顯示效果的視覺(jué)感染力。人們?cè)O(shè)計(jì)了各種字體,,并加入無(wú)數(shù)的藝術(shù)效果,。在android系統(tǒng)中TextView組件封裝了文字的顯示和操作。雖然不能像專業(yè)軟件那樣對(duì)文字進(jìn)行所有操作,,但只要我們合理的使用里面的陰影效果api,,也能大大提升文字在手機(jī)中顯示效果,以下我會(huì)用一個(gè)demo簡(jiǎn)單說(shuō)明不同的陰影帶來(lái)完全兩樣的顯示效果,。權(quán)當(dāng)是拋磚引玉了,。
1.讓文字顯示更清晰
可以看到加了一個(gè)像素的投影后文字顯得很清晰,也更有質(zhì)感,。
2.增加文字的視覺(jué)立體感,。
凹感:
凸感:
3.讓陰影看起來(lái)是倒影增加屏幕顯示的通透性。
win7桌面圖標(biāo)和android4.0桌面圖標(biāo)都加了Y軸2個(gè)像素的投影增加圖標(biāo)的感染力和視覺(jué)舒適度,,也一定程度上讓屏幕看起來(lái)更清晰透徹,。
結(jié)論:1.合理使用陰影能大大提升文字顯示的效果
2.文字陰影軟件實(shí)現(xiàn),,圖標(biāo)投影請(qǐng)UI設(shè)計(jì)時(shí)直接在資源文件上畫(huà)好。
其實(shí)android實(shí)現(xiàn)文字陰影很簡(jiǎn)單,,比如我們要實(shí)現(xiàn)以下文本效果:
a.我們可以在布局XML文件里面對(duì)TextView組件直接用屬性標(biāo)簽定義:
- android:shadowColor="#B0000000"
- android:shadowRadius="3.0"
- android:shadowDx="3.0"
- android:shadowDy="3.0"
b.也可以在源代碼里面調(diào)用TextView實(shí)例方法進(jìn)行設(shè)置:
- mTextView = (TextView)findViewById(R.id.serif4);
- mTextView.setShadowLayer(3, 3.0f, 3.0f, Color.BLACK);
Attribute Name |
Related Method |
Description |
android:shadowColor |
setShadowLayer(float,float,float,int) |
定義陰影的顏色. |
android:shadowDx |
setShadowLayer(float,float,float,int) |
陰影在水平方向的位移. |
android:shadowDy |
setShadowLayer(float,float,float,int) |
陰影在豎直方向的位移. . |
android:shadowRadius |
setShadowLayer(float,float,float,int) |
陰影的半徑. |
兩者使用都很簡(jiǎn)單,,可以根據(jù)實(shí)際情況選擇一種去實(shí)現(xiàn),也可以兩種混合著用,。一般視圖型組件的在xml里面定義,,功能型組件可在代碼中實(shí)現(xiàn)會(huì)比較方便。
Tips:定義文字陰影的4個(gè)參數(shù)都需要UI設(shè)計(jì)稿中提供,。數(shù)值不合理會(huì)讓文字顯示的更模糊難看,,過(guò)猶不及請(qǐng)務(wù)必注意。
或許這個(gè)你也可以看一下》》Android 圖片資源顯示效果研究《《,。見(jiàn) http://www./Linux/2012-07/64349.htm