筆者之前在網上看到有民間高手製做字體的相關事蹟,以爲把本身的手寫字用鍵盤敲出來是一件頗有意思的事情,因此一直有時間想製做一套本身的手寫體,前幾天在網上搜索了一下製做字體的方法,發現技術上並非太難,結合了本身PHP方面的開發經驗,很快的作出了一套本身的手寫字體。php
製做字體的流程大體是這樣,首先咱們須要肯定那些字體須要本身寫,肯定了字體以後將這一批字利用工具作成一個模板,不過漢字的總量很是的多,搜索了一下大概在10萬字左右,這個工程量太大,所以咱們須要找出一批屬於本身經常使用的字體(大概1700字左右),或者本身所常見到的字體,這個過程就須要用PHP來分析,分析出來以後再將其提取出來,作成模板。正則表達式
在這篇文章當中筆者將完整的記錄製做字體過程,其中會將用到的PHP代碼公佈出來,方便其餘讀者使用,也給本身留個備份。windows
作一套字體的工做量是比較大的,由於漢字數量比較多,不過咱們能夠將咱們經常使用的漢字提取出來,優先將這寫漢字的作出來,後面不經常使用的字體空閒時再去累加,這裏咱們用到了PHP來輔助咱們提取經常使用的漢字。數組
在網絡中有各類2000個經常使用漢字之類的doc文檔,可是每一個人所用到的卻不同;所以咱們須要收集一批本身常常接觸的字體數據,好比能夠從本身的筆記、博客、聊天數據、通信錄中提取;好比筆者便將以往的筆記、文章、通信錄收集了起來,以下圖則是筆者過往的文章列表bash
咱們將文章內容複製到txt文件當中,而後保存到某一個文件夾當中,以下圖所示微信
收集了文章以後,裏面有不少雜項,好比空格和換行,這些內容咱們並不須要,以下圖所示網絡
此時能夠經過正則表達式將不須要的內容刪除,筆者使用的匹配非中文
的正則表達式以下:phpstorm
[^\u4e00-\u9fa5]
複製代碼
筆者平時開發習慣使用phpstorm這款IDE,所以這裏教你們使用此IDE來刪除非中文字符;按住鍵盤 ctrl
+r
,替換文本內容,而後將正則表達式放入查找項當中,而且勾選regex
,此時全部非漢字內容會被選中,以下圖所示:函數
當筆者點擊Replace all
按鈕時,變刪除了全部非中文字符,此時咱們的內容應該只有一行內容,以下圖所示工具
在整理好文字以後,咱們如今須要對裏面的內容進行去重,保證每個漢字只保留一個,由於咱們字體模板每一個字只須要寫一次就能夠;所以可使用PHP對漢字進行去重,代碼以下所示
<?php
//漢字去重函數
function mb_str_split(string $string)
{
return implode('', array_unique(preg_split('/(?<!^)(?!$)/u', $string)));
}
//將收集的漢字數據讀取出來
$word = file_get_contents('ziti/shoulu.txt');
$word .= file_get_contents('ziti/phpsafe.txt');
$word .= file_get_contents('ziti/reming.txt');
$word .= file_get_contents('ziti/2000.txt');
$word .= file_get_contents('ziti/https.txt');
$word .= file_get_contents('ziti/wangwen/wuxian.txt');
$word .= file_get_contents('ziti/wangwen/qixi.txt');
$word .= file_get_contents('ziti/wangwen/qiantan.txt');
$word .= file_get_contents('ziti/wangwen/jiaoyi.txt');
//執行去重
echo mb_str_split($word);
複製代碼
當這段代碼被執行以後,會返回去重後的結果,筆者執行結果以下圖:
從圖中能夠看出,筆者已經獲得了一批去重後的文字
去重以後已經獲得了一批獨一無二的漢字,可是字數實在太多,達到了1730個漢字,可能一下寫不完,不過做爲開發者固然是要講究高效率的;因此能夠經過PHP來進行優先級的計算,把最經常使用到字體排在前面,所以筆者須要寫一段PHP代碼。
首先筆者將去重後的字符串拆分紅數組,由於漢字比較特殊,因此須要自定義一段代碼,參考代碼以下:
//把漢字拆分爲數組
function ch2arr(string $str)
{
$length = mb_strlen($str, 'utf-8');
$array = [];
for ($i = 0; $i < $length; $i++) {
$array[] = mb_substr($str, $i, 1, 'utf-8');
}
return $array;
}
複製代碼
下載筆者須要經過foreach來遍歷統計每一個字出現的次數,而且安裝倒序排序,若是limit大於0,還能夠篩選重複次數大於0的漢字,代碼以下
function strSelect(string $string, string $word, $limit = 0)
{
//把字符串分割爲數組
$cnList = ch2arr($string);
foreach ($cnList as $val) {
$result[$val] = substr_count($word, $val);
}
//重複高的出如今最前
arsort($result);
//篩選字符串
$ret = '';
foreach ($result as $key => $val) {
if ($val > $limit) {
// $ret .= "$key:$val".PHP_EOL; //查看每一個字重複的次數
$ret .= $key;
}
}
return $ret;
}
複製代碼
在前面兩個方法寫完以後,筆者只須要調用一行代碼便可得出最經常使用的一些字符,也能夠篩選結果,調用代碼以下:
echo strSelect($str, $allStr, 1);
複製代碼
代碼執行以後,筆者將會安裝漢字出現的次數進行排序,把最多見的字符排在前面,而且篩選出現次數大於1的才返回,返回結果以下圖所示:
從圖中能夠看到字體順序已經發生了很大變化,數量明顯少了不少。
http://tuchuang.songboy.net/ziti/code.txt
複製代碼
把本身最常接觸的漢字找出來以後,須要製做一套字體模板,這套字體模板的用處是讓手寫漢字後,順利的找到對應的漢字,這裏須要依靠第三方網站提供的一些功能。
如今筆者將PHP計算的字符寫入到一個txt文件當中,參考命令以下
php quchong.php > result.txt
複製代碼
保存以後,還須要將它的編碼設置爲UTF-8;操做步驟爲:首先用windows的記事本打開,而後將文件另存爲UTF-8編碼的文件,筆者用mac系統怎麼也不行,使用windows很順利的就完成了,建議使用windows
,以下圖所示
如今筆者須要將以前保存的漢字,用固定格式的模板展示出來,後期須要用此模板生成字體文件,這裏須要用到一個網站來輔助,網站地址以下
http://www.flexifont.com/
複製代碼
網站須要註冊,註冊過程筆者這裏將不作描述;在登錄以後點擊個人字體
,能夠看到當前的字體模板,選擇自定義,參考下圖
點擊自定義以後,筆者能看到一個上傳txt文件的表單,以下圖所示
上傳完成以後,筆者回到列表當中,就能夠看到剛纔建立的字體模板,以下圖所示
筆者將剛纔建立的模板下載到電腦當中,並解壓該文件,解壓後的結果以下圖所示
這裏必定要打開這些圖片確認無誤,確認這些字和上傳的字能對應的上,若是裏面的字明顯不是剛纔上傳的,頗有多是你上傳文件的編碼不正確,筆者生成的字體模板以下圖所示
確認無誤後須要將這幾張圖片打印下來,最好本身有打印機,筆者以前買過一款惠普的1121打印機,總價格不到200塊錢,建議各位讀者也買一個,有打印機有時候真的很方便;
打印出來以後,就須要筆者將對應文字意義手寫。
手寫字體是一個比較辛苦的過程,手寫完成以後還有一些步驟,若是讀者比較熟悉用手機編輯圖片,那麼這一步很快就能完成,若是不熟悉,就詳細的看一下筆者的處理方法吧。
首先須要將剛纔手寫的文字進行拍照,拍照的時候注意儘可能平着拍,須要把4個黑邊拍進去;筆者使用的是iPhone手機,所以很是建議使用iPhone的讀者將相機的網格線功能打開,由於這樣就能夠看出手機是不是平着拍的,在設置
->相機
->網格線
,參考以下圖
設置好以後,筆者再次打開相機,就能看到網格線,以下圖所示
中間的十字架若是是黃顏色的,說明筆者當前是平着拍攝的,這樣拍照的時候圖片就不會那麼斜了。
雖然在拍照的時候已經很用心的去拍攝,但拍的過程中不免有一些不滿意,這個時候能夠用手機簡單處理一下,筆者這裏依然以iPhone手機爲例
打開相冊查看圖片的右上方有一個編輯功能,以下圖所示
點擊編輯以後,在左下角有一個方塊按鈕,點擊以後能夠對圖片進行放大縮小的跳轉,以及旋轉,對齊等功能,讀者能夠本身去操做一番,將圖片儘可能調整到理想的狀態。
筆者處理後的效果以下圖所示
如今打開字體上傳頁面,把筆者已經處理過的圖片上傳到手寫體網站當中了,URL地址以下
http://www.flexifont.com/flexifont-chn/add_font/
複製代碼
以下圖所示,手寫體站點的一些規則
須要記住別選擇錯模板(筆者一開始沒選擇對,還覺得系統出問題了),而後把字體上傳,上傳完成以後,能夠點擊查看隊列,看看當前的字體處理狀態,URL地址以下
http://www.flexifont.com/flexifont-chn/queuers/
複製代碼
筆者上傳字體後,不到1分鐘便已經處理完成,處理完成以後,能夠在個人字體下方看到字體列表,以下圖所示
當字體生成完成以後,筆者安裝字體文件便可
安裝字體在mac下和widnows下都很是簡單,首先看看mac下安裝方法,下載字體以後,能夠直接雙擊字體文件,會看到以下圖
筆者直接點擊安裝字體就能夠了
再說說windows下安裝,其實也只須要雙擊字體文件便可,而後點擊安裝,以下圖所示
不過筆者在電腦在安裝字體的時候出現了錯誤,提示字體無效,因而我換了一種方式;右擊鼠標
->爲全部用戶安裝
又好了,緣由未知,若是讀者出現這種狀況也能夠試試。
筆者不少時候都會使用到word文件,讀者喜歡用wps,那麼如何在WPS中使用「輕鬆體
」呢,其實很是簡單,在隨便輸入一些文字以後,在上方選擇「輕鬆體
」便可,效果以下圖所示
若是發現某個字體不是你手寫的風格,那應該是這個字體再也不你的字體模板當中,你能夠生成一個新的模板,而後合併以前的字體便可。
在手寫體當中默認的模板也不錯,讀者也能夠去嘗試一下,另外不只僅漢字能夠作手寫體,符號也能夠。
做者:湯青松
微信:songboy8888
日期:2018年8月20號