CSS transform 中文字變形問題 — 拿掉點陣字形(Bitmap Strike)的 CSS3 Fonts 屬性

這是 Hax 提出來的問題。但是中文世界沒有福份,竟然要找一個對字形完全沒有
專業的人(我)開啟這個討論。

多個月之前裕波提出過 CSS Transform 會使得中文字變形的問題[1],而 Hax 提
出的一個解釋[2]是因為中文很多字形在字體小的時候會使用點陣字形(bitmap
strike)[3](或者說是字形檔裡面的 EBDT、EBLC、EBSC 表[4])而不是向量部份
造成的結果。(以上是對字形完全沒專業的人到目前為止的理解,如果有比較好的
資訊請不舍指教)

這感覺起來是很低層次的操作,而我跟 Hax 研究到目前為止 CSS3 Fonts 沒有這
樣的東西,連直接操作 OpenType feature 的低層次屬性
'font-feature-settings'[5] 裡面似乎沒有這個 feature[6]。這當然可以用
webfont 解決(給沒有EBXX部份的字形),不過似乎不是很好的解法,也不能解決
內建字形的問題,所以標準看來是有缺陷的。這裡可能有幾種解法:

1. 當 transform 的時候自動取消點陣字形
這會是最簡單的解法嗎?
但是這會造成 transform 前 transform 後字形不協調嗎?有沒人可以用 WebFont
做個實驗看看?

如果這個方法是最好的,那這也蠻可能被視為是一種實作品質(Quality of
Implementation)的問題而不寫入標準的。

2. 新屬性
font-bitmap: none; 之類的

3. 新的 OpenType feature
有人知道為什麼沒這個 feature 嗎?還是說這不屬於這個層級?這雖然跟 W3C 無
關了,不過沒有人說這個小組只跟 W3C 有關吧。另外,這其實跟 2 不是獨立的,
因為很多 CSS3 Fonts 的屬性都只是 OpenType feature 而已。

4. transform: rotate(0) 的時候不使用點陣字形
算是 1. 提到的問題的一種另類解法,優點是省了一個屬性,不過不曉得會不會造
成學習上的困擾?另外要確認一下有沒有跟現在的規範有不兼容的地方、、、

想法?

[1]
http://lists.w3.org/Archives/Public/public-html-ig-zh/2010Oct/thread#msg23
[2] http://lists.w3.org/Archives/Public/public-html-ig-zh/2010Oct/0025
[3] http://fontforge.sourceforge.net/editexample8.html
[4] http://www.microsoft.com/typography/otspec/otff.htm#otttables
[5] http://dev.w3.org/csswg/css3-fonts/#propdef-font-feature-settings
[6] http://www.microsoft.com/typography/otspec/featurelist.htm

(這裡有幾個地方希望大家幫忙一下,上次討論的時候似乎有有人看得出問題有人
看不出問題的困擾,希望大家可以附一下圖片,讓想要了解這個問題的人一眼看出
問題在哪、、、另外,如果有人有解釋哪些字形有 bitmap strike 的文章連結也
麻煩給一下,或是自動自發在 wiki 上開一個條目)


== 標準與實作界線,以下跟標準無關 ==

我跟 Hax 討論的時後,我是懷疑這個功能會不會因為太底層所以有實作困難(畢
竟涉及到 EBXX 表的操作),不過他是說 FreeType 有這個 API,但是 Windows
的情況是怎麼樣呢?(好像原本就只有 Windows 有問題,是 MacOSX 本來就沒去
看 EBXX嗎?)。我其實不是很太了解瀏覽器文字渲染的代碼路徑的狀況是怎麼
樣,所以開了 wiki 條目[7],麻煩了解狀況的人貢獻一下啦。

我在研究過程中,發現了一篇 Behdad Esfahbod 寫得很好的文章 《State of Text
Rendering》[8],推薦大家看看。特別是它有提到 CJK 問題的部份,需要有一些有
美感的人準確的描述中文中的英文的字形的選擇問題。

有人想自告奮勇翻譯這篇文章嗎?可以放在小組的 wiki 上。

[7] http://www.w3.org/html/ig/zh/wiki/%E6%96%87%E5%AD%97%E6%B8%B2%E6%9F%93
[8] http://behdad.org/text/


此致
Kenny, W3C
Twitter: http://twitter.com/kanghaolu
Plurk: http://www.plurk.com/kennyluck

Received on Monday, 4 July 2011 01:51:31 UTC