フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると...

44
フォントしく 第3回 DTPの勉強会狩野宏樹(株式会社イワタ)

Upload: others

Post on 17-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントのしくみ第3回 DTPの勉強会■

狩野宏樹(株式会社イワタ)

Page 2: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

全体の流れ

Page 3: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントのフォーマットについて

~「OpenType」って何?~

Page 4: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

いろいろなフォントフォーマット

Type 1

OCF

CID

CFF

OpenType(.otf)

TrueType

TrueType GX

TrueType Open

OpenType(.ttf )

1985

1987

19911992

1995

1996

※年号は、製品でなく技術の発表年(見た資料の中で古いのを採用)

Page 5: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントのアウトラインには 2種類ある

Page 6: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントの中には点の座標が入っている。

(9, 7) - (9, 77) - (20,77) -(20,24) - (44,24) - (44, 93) -(56, 93) - (56,24) - (80,24) -(80,77) - (92, 77) - (92, 7) -(80, 7) - (80, 14) - (20,14) -(20, 7) - (9,7)

・点の座標は整数・最後は元の点に戻る

アウトライン表示の仕組み(1)

Page 7: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

← 囲まれた内側を  塗りつぶした結果

  12×12に↓ 縮小するには…?

アウトライン表示のしくみ(2)

Page 8: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

y = (0.5/12) * 100 = 4.167

y = (1.5/12) * 100 =12.5

y = (2.5/12) * 100 = 20.833

y = (3.5/12) * 100 = 29.167

y = (4.5/12) * 100 = 37.5

……

アウトライン表示のしくみ(3)

12×12のピクセルを拡大して 100×100の升目に重ね合わせると、ピクセル中心の位置は次のように計算できる。

Page 9: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

アウトライン表示のしくみ(4)

y=37.5 の高さの所で横線を引いてみる。

最初はアウトラインの外側にいて、交差するたびに内→外→内→…と移るから、升目の中心で交差回数 1,3,5 回 = 黒(塗り潰す) 0,2,4,6 回 = 白(そのまま)となる。

アウトラインを構成する全ての線分と y=37.5 の交点の x座標を求めれば塗り潰すピクセルが判る。

0 1 2 2 2 3 3 4 4 4 5 6

Page 10: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

アウトライン表示のしくみ(5)

機械的に計算すると線の太さが不揃いになることがある。

これを避けるために「ヒント情報」が内蔵できる。

PSフォントの例フォント全体の設定 : /StdVW [12] def /StdHW [11] def

グリフデータの付加情報 : 0 12 vstem 35 12 vstem 79 12 vstem 7 11 hstem → 縦線の太さは 1ドットで統一

Page 11: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

x(t) = x₀ t³+3 x₁ t²(1- t)+3 x₂ t(1- t)²+x₃ t(1- t)³y(t) = y₀ t³+3 y₁ t²(1- t)+3 y₂ t(1- t)²+y₃ t(1- t)³ (0 ≦ t ≦ 1)

x(t) = x₀ t²+2 x₁ t(1- t)+ x₂ (1- t)²y(t) = y₀ t²+2 y₁ t(1- t)+ y₂ (1- t)² (0 ≦ t ≦ 1)

2つのBézier 曲線(1)

z₀ = (x₀, y₀)

z₁

z₂

z₃

z₁

z₀ z₂

3次 2次

Page 12: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

2つのBézier 曲線(2)z₁

z₀ z₂

3 次は 2次を兼ねる

誤差 0.06%

誤差 6.1%

点の数が少なくてすむ

Page 13: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントのフォーマットはいろいろある

Page 14: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

OpenType(OTF)って何?

Page 15: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

2種類のOpenType

Page 16: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントの内部構造

~各テーブルには何が入っているか~

Page 17: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントの全体構造(sfnt構造)

Page 18: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

フォントにはどんなデータが必要か

Page 19: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

字形

Page 20: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

メトリック

Page 21: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

活字と写植の考え方の違い

Page 22: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

デジタルフォントのメトリック

Page 23: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

縦書きのメトリック

Page 24: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GIDとCID

Page 25: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

Cmap

Page 26: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

メタデータ

Page 27: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

「複雑な」テキスト表示について

~GSUB, GPOSの構造~

Page 28: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

どうしてテキストが表示できるの?

Page 29: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

「複雑」って何?

Page 30: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

複雑な指示が必要になる場合

Page 31: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

「フィーチャ」

Page 32: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

レイアウトテーブルの構造

Page 33: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

Lookupの構造

Page 34: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GSUBの例1:縦書き

Page 35: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

縦書きの具体例

Page 36: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GSUBの例2: ユーザの指示による置換

Page 37: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

主なGSUBのフィーチャタグ(欧字)

Page 38: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

主なGSUBのフィーチャタグ(和字)

Page 39: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GSUBの例3: 言語による切り換え

Page 40: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GSUBの例4, 5: 選択型の置換・合字

‘ ’

Page 41: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

IVS

Page 42: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

GPOSの例

Page 43: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

参考文献(1)

Page 44: フォントのしくみアウトライン表示のしくみ(5) 機械的に計算すると 線の太さが不揃いに なることがある。これを避けるために 「ヒント情報」が内蔵

参考文献(2)