易多 劉純慧 舒暢
湖南警察學院 湖南長沙 410138
書法作為中國上千年的傳承之物,是中國文化的代表作,漢字則是漢民族文化經(jīng)歷數(shù)千年積累、沉淀所形成的思想智慧的結晶。隨著科技的革新和互聯(lián)網(wǎng)的發(fā)展,電腦和手機已經(jīng)完全融入了人們的日常生活。伴隨著互聯(lián)網(wǎng)技術的日益成熟和手機電腦的普及,現(xiàn)階段的“敲字如飛”逐漸替代了傳統(tǒng)漢字一筆一畫的書寫。對于漢字這一傳統(tǒng)文化而言,長時間使用手機和電腦使得許多人只能大致記住其形態(tài),提筆才發(fā)現(xiàn)無法正確地寫出其具體的部首結構。設計出這樣一款APP不但能滿足個人對個性化字體的需求,也讓人們重新認識手寫字體的重要性,避免“提筆忘字”的尷尬。對于以往的書法類APP而言,“字游”APP能夠通過拍照識圖、手繪字體的方式獲取到個人的字體,再將圖像字體輪廓錄入字庫,將個人字體轉換為圖文的形式再嵌入輸入法中,能夠實現(xiàn)個人個性化字體在互聯(lián)網(wǎng)上的流通。
談及字體庫數(shù)字化的呈現(xiàn),不得不追溯字符編碼的發(fā)展歷程,在此只簡單介紹其中的一部分。初期由美國科學家開發(fā)了電子計算機,為了便于自身使用,ASCII編碼應運而生,所有英文符號、數(shù)字和標點符號都能夠在電腦上正確表達??蒲腥藛T發(fā)現(xiàn)共有128個這樣的字符,故規(guī)定用8位二進制來表達每一個字符。隨后,一些非英語母語的發(fā)達國家也引進了計算機,而其母語字數(shù)也在128位之內,正好填補了之前ASCII碼128~256位的空白,便各自將ASCII碼進行擴展,將其后128位字符表示為各自的母語字體。例如,在法語中的“é”,它的ASCII編碼是130(二進制10000010),但在希伯來語編碼中的同等位數(shù)又顯示是Gimel,在其他編碼中又會是另一種字符。因此不管怎樣,ASCII擴展碼中0~127表示的符號都是一樣的,而128~255的這一段卻大相徑庭。
當我國開始使用計算機時,由于漢字的數(shù)量遠大于2的8次方,我們開始自行摸索繼而有了GB2312字符編碼的誕生。其規(guī)定前127位字符與ASCII碼相同,大于127位的碼數(shù)用于定義漢字,采用兩個8位二進制定義一個字符。其規(guī)定以8位一組,將前一個字節(jié)稱為高字節(jié),后一個字節(jié)稱為低字節(jié),可組合表示6763個簡體漢字,依照漢字的拼音、部首和筆畫進行排序。一直到后來ISO(國際標準化組織)推出了Unicode(萬國碼),各國才有了一個統(tǒng)一且能涵蓋各國字體的規(guī)范化字符編碼。
在機器中,可視化的字體都源于本機的字體庫。就電腦中字體而言,windows系統(tǒng)所采用的默認字體為“微軟雅黑”,在C:WindowsFonts路徑下我們會發(fā)現(xiàn),windows系統(tǒng)中還裝有“仿宋常規(guī)”“楷體常規(guī)”等以.ttf為后綴的多種字體。也就是說,由個人創(chuàng)造的字體庫也同樣需要寫入該路徑中,電腦才能對其進行檢索、解析及調用。再使用界面中自帶的“查找字符”功能分別去查看這些字體的字符映射表,不難發(fā)現(xiàn),相同位置的字體所對應的字體字符編碼都是采用ucs-2編碼(Unicode編碼中的一種),并且都為同一個字。我們可以從中得知其中的映射關系——字體的存儲就好比是一張相片對應著一個相框,不管相片的大小顏色如何改變,電腦的理解都只停留在相框這一層。
TTF(True Type Font)是由微軟與APPle公司聯(lián)合發(fā)布的字體文件格式。隨著Windows的普及,已成為目前最普遍的一個字體文檔顯示方法。
True Type字體是Windows操作系統(tǒng)所采用的唯一文字標準。它能夠簡單便捷地將文字輪廓轉換成曲線,可以直接根據(jù)曲線輪廓加以文字填充,構成各種不同的色彩圖案和文字效果,所以它常常被用作一種標題文字或者花樣字。
而ttf文件實質上也正如一個集裝箱,每種True Type字體包含于單個ttf文件中。其文字目錄中包含記載著所有文字格式文件的版本號文件和幾個表,各個表上又各自存儲記載著所有不同形式的文字邏輯記錄,包括最基本的圖元中的數(shù)據(jù)、字距的調整和信息文字、與圖元之間的映射等。
字體設計是針對一個參考網(wǎng)格設計的,該網(wǎng)格被稱為em-square,網(wǎng)格中的坐標系可以表達文字中的圖元。所以,em-squrare大小直接定義了文本中所有圖元被縮放的方式。True Type字體對網(wǎng)格調節(jié)的要求可體現(xiàn)在控制值表中。例如,對于需要設計的文字來說,字體長度、字體筆畫的長度,都可以是被限制的數(shù)值。
在計算機中,為完成對漢字信息的存儲、傳遞和檢索等一系列操作,需要采用到一個名為漢字內碼的機內代碼。計算機通過鍵盤鍵入接收到字體信息后,會由漢字操作系統(tǒng)的“輸入碼轉換模塊”將其信息轉換成機內代碼。不管何種的漢字系統(tǒng)和錄入方法,都要先經(jīng)過電腦的轉化成為機內代碼,才能對其信息加以貯存和處理。在轉化成為機內代碼之后,計算機再利用漢字字模碼用點陣的方法對漢字的字形進行塑形。這種點陣方法就如一個個黑白方塊,用黑色對所需方塊加以填充,從而得到字形,所以簡而言之漢字字模碼也就是漢字的輸出形態(tài)。針對各種漢字的輸出條件不同,其相應的點陣多少也會有所不同,如“一”“二”等簡易型漢字可用16*16點陣,而隨著漢字筆畫及其復雜程度的提升,點陣的規(guī)模也會隨之擴大。字體庫中保存了所有字體的點陣代碼。在顯示器輸出文字時,電腦才會去檢查字庫,輸出字模點陣以得到正確的字形。
“字游”,顧名思義,是一場字體的暢游,是不同手寫字體之間的一次碰撞。同時,與“自由”諧音,包含對其字體流通的自由自在,不受拘束的美好愿景。
“字游”是一款致力于用戶的個性需求,讓手寫字體能夠在電子設備上展示的APP。APP能清晰全面地展示手寫字體,讓用戶體驗學習他人的字體。通過網(wǎng)絡實現(xiàn)個人字體在互聯(lián)網(wǎng)中的流通從而帶動文化傳播,增強民族自尊心、自信心。同樣,文字是文化的根,行書的美觀,楷書的實用,草書的張狂,都能表現(xiàn)出很強的主觀精神,具有很強的綜合性。
“字游”APP采用兩種字體錄入方式。其一是用戶用手指在手機屏幕上直接繪制字體,其二是通過拍照的方式,對紙張上的字體進行捕捉。自助式制作屬于自己的字體,能夠為用戶帶來與眾不同的體驗。
“字游”APP主要設計有三種模塊,即登錄模塊、個性造字模塊及我的字庫模塊。登錄模塊的主要功能是用戶的注冊,登錄和退出登錄;個性造字模塊主要用于創(chuàng)建字庫,同時完成對個人即將創(chuàng)建的字體進行描述,為個人字體取名等操作。其中有兩種字庫可供用戶選擇,分別是常用字庫和國標字庫,前者包含大部分簡單字體,可滿足常用字體的錄入,后者的字庫則較為完備。在我的字庫模塊中,用戶能夠看見個人創(chuàng)建的所有字庫,并可對其進行刪除、繼續(xù)書寫和改寫等一系列操作。
以下是部分操作界面展示:
圖1 創(chuàng)建字庫界面
圖2 書寫界面
“字游”希望實現(xiàn)的功能,是將手寫漢字通過拍攝得到的圖形替換本機字體,實現(xiàn)“摳字”功能,就類似于將圖片進行摳圖處理。各類圖片實質上是用不同色塊像素拼接而成,我們需要摳下其中的有效色塊。打個比方,將0~255對應成黑白色塊的顏色深淺程度,“0”代表黑色,“255”代表白色,中間的數(shù)字則代表由0至255顏色逐步遞減的色塊。將需要進行“摳字”處理的圖片進行色差調節(jié),此時的圖片只有黑白兩色,利用腳本將黑色像素的保留,可得到字體的輪廓。
為實現(xiàn)“摳字”功能,還需要一定的環(huán)境要求,為保證字體質量,需要在適合的光亮和淡色的平滑紙張上進行書寫拍攝,手動書寫的漢字也要盡量勻稱,否則字體可能出現(xiàn)斷斷續(xù)續(xù)的情況。此外,通過“摳字”得到字體還需進行字體比例、位置的調節(jié)。少了這項操作,展示在我們眼前的文字會東倒西歪,甚至不在一條直線上。在ttf文件中記錄了每個字體的比例。故按照默認字體的字體比例進行調節(jié)可以很好地解決這一問題。
手繪字體的原理在于用Android屏幕進行手寫簽字的過程中,其實際是將手機觸摸屏視為畫板,將用戶指尖當作畫筆,指尖可置于手機觸摸屏上進行滑動,觸摸屏上將會自動呈現(xiàn)用戶指尖移動的軌跡,類似于用畫筆在一個畫板上繪畫的效果。
機器中字體替換的功能本質上是ttf文件的默認字體權限的更改。因此,將經(jīng)過處理后得到的所有圖片集合轉換為ttf文件,再將其權限修改為默認字體即可。
字體輸入的實現(xiàn)應與輸入法相關聯(lián)。一個輸入法的核心類為InputMethodSe rvice,候選字的顯示以及漢字的上屏等所有邏輯功能均使用該服務來完成。我們能夠通過Keyboardview方式或者Keyboard對象來完成單一的按鍵布局格式。KeyboardView同時也是一種真空的view,它的布局是不可預見的,但它的代碼含有一個名為Keyboard的輔助類成員,它能夠承擔相應的按鍵布局,包含了中英文鍵盤、數(shù)字和符號按鍵等,把布局上的按鈕與鍵盤系統(tǒng)內部的KeyCode對應出來,通常我們在建立Keyboard的時候可以直接添加xml文檔。
Android手繪字體的實現(xiàn),首先,要選取某個屏幕尺寸的bitmap為底圖,并設定為全透明色。其次,將整個canvas內置于bitmap上,把觸控點擊事件作為paint即可。具體操作步驟為:獲取當前屏幕的長和寬,獲取布局和button,并寫出點擊事件,設置畫圖相關的bitmap、canvas、paint等,再寫點擊事件。最后,加載一個view,并再加上一個新的button,點擊取消標記即可。
具體關鍵代碼如下:
drawView=new DrawView(this,windowHeight,windowWidth);//通知view組件重繪
drawView.invalidate();
rl.addView(drawView);
btnn=new Button(this);
btnn.setText("new button");
RelativeLayout.LayoutParamsbtnpara=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
btnpara.addRule(RelativeLayout.CENTER_HORIZONTAL);
btnpara.addRule(RelativeLayout.CENTER_VERTICAL);
rl.addView(btnn,btnpara);
btnn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
rl.removeView(drawView);
rl.removeView(btnn);
}
這時我們會想:“為什么不能只替換自己經(jīng)常用到的幾個字體呢?”事實上不能篡改Microsoft上的字體,這樣可能會涉及版權問題。為了避免這一問題的發(fā)生,我們需要創(chuàng)造出屬于自己的一套字庫。GB2312字符編碼可以表示6763個漢字,就算只采用現(xiàn)今的常用字庫也有3600余字,如果只是逐一輸入,還要保證對每個字體的滿意程度,這會是一個耗時耗力的工程,也是現(xiàn)今個性化字體類軟件不得不面對的一個共同難題。我們不禁聯(lián)想,是否可以開發(fā)出一種“自動學習”的功能,只獲取到用戶提供的偏旁部首,而后再去拼裝成一個完整的漢字。相信如此,錄入字體的工作量會大大減輕。