2013年5月2日 星期四

從字型檔中取得文字的輪廓

我承認我對字型檔有非常特別的愛好:打開一個字型檔,欣賞著它美麗的字體,就可以讓我開心一段時間。有些字體相當的工整,很適合用來製作美麗的書本或報告;有些則相當的具有藝術氣息,如果放在海報或藝術作品上面會有相當好的效果。總之在我眼中,那些一個個的字體就像是藝術品一般的迷人。有一些字體甚至被設計成裝滿形狀特別的符號的箱子,等你拆開來好好的一個個放大來欣賞。

如果你想要把某個字型中特定文字的輪廓拿出來欣賞,或是用在自己的作品中,你可以使用inkscape,製作一個文字物件,再把它轉換成路徑(path)。但如果那個裝著可愛蘋果圖案的字型還沒安裝到電腦裡的話(而且你不想安裝)?或者是,你有一串想要符號的清單,想要一口氣抽取它們的輪廓?這時候就寫個程式請電腦幫忙吧!

藉著Freetype2的幫助,你可以一口氣把許多字的圖案抽取出來並且把它們畫出來。如果你用GNU/Linux,那麼你現在所見的使用者界面上的文字有九成以上(百分之百就太滿了)是Freetype2和許多繪圖程式庫互助合作的結果。然而,我們希望可以抽取的是字的輪廓(outline)而不是已經轉換成點陣圖(rasterized)的結果。

從Freetype2的文件得知,在載入glyph(文字的形狀)的時候,如果該字型是所謂的輪廓字型的話,那麼輪廓已經準備好可以使用了。輪廓字型,相對於點陣字型,裡面存放著每個文字的輪廓,可以讓我們自由的放大縮小而不變形(點陣圖放大的話,會看到一格一格的)。取得輪廓之後,利用FT_Outline_Decompose來列舉輪廓的內容,或是對輪廓做各式各樣的處理(翻轉、放大、縮小、輸出等)。

我把詳細的作法流程組合成一個小程式。你可以指定字型檔案的位置以及你想要抽取的字元,接著小程式就會替你把它抽取出來。對批次處理有興趣的人不妨使用shell script, perl或python來試試看!

沒有留言:

張貼留言