自建中文 Web Fonts

自建中文 Web Fonts

Update

  • 18 Oct 2017 | v0.0.1 基本測試完成
  • 18 Oct 2017 | v0.0.2 加上字數
  • 19 Oct 2017 | v0.0.3 搜尋所有資料夾

由於現有網上的 web fonts 不能滿足我的需求,所以決定自己 Fonts 自己 host 。
具體做法如下:

flow-80

  1. 先找一隻心儀的中文Fonts
  2. 偵測網站中 Heading1 用的字元
  3. 在 Fonts file 中抽取有使用的字元
  4. 把己抽取的字型壓縮及轉換成不同 Web fonts format
  5. 在 html 讀取 web fonts 格式

這樣做最大的好處就是字體檔極細,而且己經預先輸出不用再即時生成,所以讀取也很快

看似簡單但也花了我不少時間,由於我正在學習 JavaScript,所以整個動作也會用 NodeJS 去完成。
我把 Project 放了在Github,可以下載整個 Project 試試看。

設定

//setting
const fileDirectory = './';
const fileExtension = 'html';
const fontsSource = './fonts/seto.ttf';
const outputPath = 'build/';
const fontsClass = 'h1';

解說

  • fileDirectory 目標資料夾 暫時只支援單層資料夾
  • fileExtension 副檔名,理論上支援 php 之類格式,但不支援變數,所以還是 html 吧...
  • fontsSource 字型原檔,暫時只支援 .ttf
  • outputPath 輸出已壓縮字體的位置
  • fontsClass 需要轉換字體的元素,支援 class/id,e.g.(.title/#title)

安裝 Package

先準備好安裝所需的 package.json

{
  "name": "ChineseFonts",
  "version": "0.0.3",
  "description": "Zip target fonts to web fonts",
  "main": "index.js",
  "dependencies": {
    "fontmin": "latest",
    "fs": "latest",
    "gulp-ttf2woff2": "latest",
    "fast-html-parser": "latest",
    "imagemin": "latest",
    "imagemin-svgo": "latest",
    "readdir": "latest"
  },
  "devtool": {
    "source-map": "latest"
  },
  "scripts": {
    "build": "node index.js"
  },
  "author": "Edmond Yip",
  "license": "MIT"
}

npm install 進行安裝

$ npm install
...
$ added 330 packages in 34.671s

解說

  • bluebird 處理 promoise
  • fontmin 處理字體轉換的核心
  • fs 讀取文件
  • gulp-ttf2woff2 為 fontmin 追加 woff2 檔輸出
  • fast-html-parser 快速抽取所需文字之用

建立測試頁

我做用了可以合法免費使用的瀨戶フォント作測試,是一隻可愛風的日本字體,不但有大量漢字而且也可以合法地用作web fonts。

CSS

@font-face {
  font-family: 'seto';
  src: url('../build/seto.eot');
  src: url('../build/seto.eot') format('embedded-opentype'),
  url('../build/seto.woff2') format('woff2'),
  url('../build/seto.woff') format('woff'),
  url('../build/seto.ttf') format('truetype'),
  url('../build/seto.svg') format('svg');
}

h1 {
  font-family: 'seto';
  font-size: 60px;
}

index.html

  <h1>我是超級大標題</h1>
  <p>我是小字體</p>

test.html

  <h1>第二標題</h1>
  <p>測試重覆字體</p>

運行方法

$ npm run build
$
$ > [email protected] build /var/ChineseFonts
$ > node index.js
$
$ Converted words : 我是超級大標題第二 (9)

只要設定沒問顯,就會顯示已轉換的中文字及字數。

Screen-Shot-2017-10-19-at-11.26.54-AM

再看看 index.html,成功了!

Screen-Shot-2017-10-19-at-11.41.44-AM

容量只有 3.6 kb!

比起原本的 setofont.ttf 高達13.1mb大大縮減了!
即使在網站上使用也可以快速完成!

後記

第一次開發open source,多得朋友的支援才能成功
不過此程式還有改善空間,我有時間會再update更多功能。

Read more

未來 AI 是否取代人類工作?

未來 AI 是否取代人類工作?

近幾年 AI 發展蓬勃,每個月都有大量新 AI 工具推出,每幾個月就有一次大革新,很多人都預言 AI 會取代人類工作,但是 AI 會怎樣取代人類的工作呢?人類會否因此失業? AI 真的會取代你的工作嗎? 大家心目中的 AI 總是一個機械人的樣子,當然現時也有很多公司已經開發機械人,然後這個機械人坐在你原本的位置取代了你的工作。 這種事情會發生嗎? 簡單直接地說就是短時間內不會發生,AI 可以取代人的唯一原因是,使用 AI 更便宜。你認為買一個機械人要多少錢,還要訂閱 AI 服務才會聽的懂你的指令,還有機械人壞了要維修,還有很多機械人未能支援的工作,可能每幾年又要花錢升級機械人。 對老闆來說花這麼多錢買個不肯定能完成工作的機械人來取代人工作太不化算了,大概會有些公司會花錢買幾隻玩玩,但用來取代便宜得多的人手是不現實的。 那麼 ChatGPT 會取代我的工作岡位嗎? 相信有部門功能性極底的工作可以由 ChatGPT 取代,但是不會是全部,而且取代的方式也不會是你的工作岡位消失變成由 ChatGPT 工作。 舉一個例子,一間公司有設計師,