SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
iOSで縦書き
Report
Hashimoto Shogo
Follow
システムランド
Sep. 28, 2015
•
0 likes
•
4,293 views
1
of
40
iOSで縦書き
Sep. 28, 2015
•
0 likes
•
4,293 views
Download Now
Download to read offline
Report
Technology
CoreTextを使用したiOSの縦書き表示 及び フォントの仕組みに関する自主研究発表資料です。
Hashimoto Shogo
Follow
システムランド
Recommended
【Swift】ローカル通知のバックグラウンド対応
Nekokichi
362 views
•
15 slides
Lockfree list
Kumazaki Hiroki
109K views
•
58 slides
ACDPub.pptx
Ikuo Takahashi
544 views
•
30 slides
MySQLの文字コード事情 2017版
Masahiro Tomita
35K views
•
56 slides
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
4.6K views
•
42 slides
今さら聞けないasteria warp運用の基礎 ファイナル
ASTERIA User Group
3.9K views
•
36 slides
More Related Content
What's hot
Chef社内勉強会(第1回)
Yoshinori Nakanishi
15.6K views
•
38 slides
明治大学理工学部 特別講義 AI on Azure
Daiyu Hatakeyama
988 views
•
101 slides
Μέχρις_ότου - Σύγκριση με Όσο...επανάλαβε - Γενικές Παρατηρήσεις
frijalas
4.7K views
•
7 slides
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
9K views
•
43 slides
HBaseを用いたグラフDB「Hornet」の設計と運用
Toshihiro Suzuki
9.1K views
•
133 slides
Spannerに関する技術メモ
Etsuji Nakai
9.3K views
•
21 slides
What's hot
(20)
Chef社内勉強会(第1回)
Yoshinori Nakanishi
•
15.6K views
明治大学理工学部 特別講義 AI on Azure
Daiyu Hatakeyama
•
988 views
Μέχρις_ότου - Σύγκριση με Όσο...επανάλαβε - Γενικές Παρατηρήσεις
frijalas
•
4.7K views
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
•
9K views
HBaseを用いたグラフDB「Hornet」の設計と運用
Toshihiro Suzuki
•
9.1K views
Spannerに関する技術メモ
Etsuji Nakai
•
9.3K views
ΠΛΗ10 ΜΑΘΗΜΑ 1.5
Dimitris Psounis
•
5.6K views
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.5
Dimitris Psounis
•
5.2K views
C#/.NETがやっていること 第二版
信之 岩永
•
39.4K views
データモデリング・テクニック
Hidekatsu Izuno
•
17.4K views
創作共用電子書:語言處理技術
鍾誠 陳鍾誠
•
4K views
今さら聞けないITエンジニアのための管理会計
Keisuke Tameyasu
•
9K views
Les listes en Python
ABDESSELAM ARROU
•
1.8K views
Spanner移行について本気出して考えてみた
techgamecollege
•
1.6K views
ΠΛΗ20 ΚΑΡΤΑ ΜΑΘΗΜΑ 1.4
Dimitris Psounis
•
6K views
Exercices pascal tous les chapitres
borhen boukthir
•
19.5K views
ジャストシステムJava100本ノックのご紹介
JustSystems Corporation
•
10K views
Marp入門
Rui Watanabe
•
940 views
歌声分析のエンタテイメント応用
Akinori Ito
•
5.4K views
Rpn and forth 超入門
Yoshitaka Seo
•
2.9K views
Recently uploaded
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
115 views
•
31 slides
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
164 views
•
16 slides
GraphQLはどんな時に使うか
Yutaka Tachibana
14 views
•
37 slides
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
145 views
•
12 slides
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
5 views
•
1 slide
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
118 views
•
31 slides
Recently uploaded
(14)
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
115 views
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
164 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
14 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
145 views
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
•
5 views
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
•
118 views
画像生成AIの問題点
iPride Co., Ltd.
•
10 views
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
•
44 views
CatBoost on GPU のひみつ
Takuji Tahara
•
548 views
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
•
7 views
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
•
7 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
57 views
テスト自動化.pdf
ssuserf8ea02
•
29 views
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
•
20 views
iOSで縦書き
1.
i O Sで
縦 書 き CoreText,Font,Glyph 2013/12/13
2.
Agenda 1. 縦書きの要件整理 2. CoreTextでの縦書き実装方法 3.
Fontの内部情報と縦書き実現の仕組み 4. まとめ
3.
1.縦書きの要件整理
4.
あ の イ ー ハ ト ー ヴ ォ の す き オ 市 、 郊 外 の ぎ ら ぎ ら ひ か と お っ た 風 、 夏 で も 底 に 冷 た さ を も つ 青 い そ ら 、 う つ く し い 森 で 飾 ら れ た モ リ ー る 草 の 波 。 ( 宮 沢 賢 治 ) あ の イ ー ハ ト ー ヴ ォ の す き オ 市 、 郊 外 の ぎ ら ぎ ら ひ か と お っ た 風 、 夏 で も 底 に 冷 た さ を も つ 青 い そ ら 、 う つ く し い 森 で 飾 ら れ た モ リ ー る 草 の 波 。 ( 宮 沢 賢 治 ) 縦書きレイアウト +横書きグリフ 縦書きレイアウト +縦書きグリフ
5.
あ の イ ー ハ ト ー ヴ ォ の す き オ 市 、 郊 外 の ぎ ら ぎ ら ひ か と お っ た 風 、 夏 で も 底 に 冷 た さ を も つ 青 い そ ら 、 う つ く し い 森 で 飾 ら れ た モ リ ー る 草 の 波 。 ( 宮 沢 賢 治 ) あ の イ ー ハ ト ー ヴ ォ の す き オ 市 、 郊 外 の ぎ ら ぎ ら ひ か と お っ た 風 、 夏 で も 底 に 冷 た さ を も つ 青 い そ ら 、 う つ く し い 森 で 飾 ら れ た モ リ ー る 草 の 波 。 ( 宮 沢 賢 治 ) 縦書きレイアウト +横書きグリフ 縦書きレイアウト +縦書きグリフ
6.
定義 引用:Unicodeの基礎知識-http://marigold.sakura.ne.jp/devel/unicode/basics.html • グリフイメージ(Glyph image) 何らかの表示媒体(コンピュータのディスプレイや紙などの)上に描 いたグリフ表現の具体的な画像. •
グリフ(Glyph) (1)1個以上のグリフイメージを表現する抽象形式.(2)単にグリフイ メージの同義語としてグリフという語を使う場合もある.Unicodeに おいては,ある文字を具体的な画像表現に直す場合に,複数個のグリ フを使ってもよいことになっている.描画エンジンが,複数のグリフ を組み合わせ,適切な位置に配置することで特定の文字の画像表現を 作り出すことがありうる. • フォント(Font) 文字の視覚的表現のために使われるグリフを集めたもの.フォントは たいていの場合,大きさ,傾き,太さ,ヒゲのあり・なしといった変 数と関連付けられていて,これらの変数に特定の値を与えると,グリ フの具体的な画像表現の集合が得られる.
7.
余談)文字コードとグリフは一対一対応していない U+7BB8 U+7BB8 U+3001 U+FE11 U+E0101
U+E0100 CID+3384 CID+7775
8.
縦書きの必要要件 1. 縦書きのレイアウトにすること • 文字方向は上から下、行は右から左に配置 2.
縦書き用のグリフを使うこと Option. 縦書き用のカーニングとか
9.
2.CoreTextでの縦書き実装方法
10.
iOSで縦書きが可能になるまでの歴史 • Mac OS
8.5:CoreTextが採用される。(QuickDraw/ATSUIから置き換え) →iOSに移植 • iOS3.2 : CoreTextのAPIが使用可能に! →しかし、縦書きはサポートされていなかった(らしい)。 kCTVerticalFormsAttributeNameが実装されていなかった • iOS4.3:縦書きがサポートされた! →しかし、バギーだった(らしい)。 縦書きグリフが使われない等。 Core Textで縦書きを - Okanoyou Today http://app.m-cocolog.jp/t/typecast/66444/14986/65138205 CoreTextのはなし – Yusuke Ito https://speakerdeck.com/yusukeito/coretext • iOS5以降:縦書きの実装がまともになった!! ←いまここ
11.
UIView drawRectで描画する 1. 属性付文字(NSAttributedString)
を生成 縦書きグリフの使用を指定 2. CTFrameを生成し、属性付文字を設定 縦書きレイアウトの指定 3. 座標を反転 原点左下(CoreGraphics) →原点左上 4. 描写 Cf. CoreTextの構造
12.
- (void)drawRect:(CGRect)rect { NSMutableAttributedString *attrStr
= [[NSMutableAttributedStringalloc]initWithString:[self getText]]; [attrStr addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HiraMinProN-W3" size:18.0] range:NSMakeRange(0, attrStr.length)]; [attrStr addAttribute:NSVerticalGlyphFormAttributeName value:[NSNumber numberWithInteger:1] range:NSMakeRange(0, attrStr.length)]; UIViewのdrawRectで描画する
13.
// フレーム(CTFrame)の生成 CTFramesetterRef framesetter
= CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attrStr); // 文字レイアウト方向属性の設定 NSDictionary* layoutAttrDict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: kCTFrameProgressionRightToLeft], kCTFrameProgressionAttributeName, nil]; CGPathRef framePath = [[UIBezierPath bezierPathWithRect:rect] CGPath]; CTFrameRef frame = CTFramesetterCreateFrame( framesetter, CFRangeMake(0, attrStr.length), framePath, (__bridge CFDictionaryRef)layoutAttrDict);
14.
CGContextRef context =
UIGraphicsGetCurrentContext(); // 座標を上下反転 CGContextTranslateCTM(context, 0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextSaveGState(context); // CoreTextの描画 CTFrameDraw(frame, context); CFRelease(frame); CFRelease(framesetter); }
15.
http://www.freetype.org/freetype2/docs/glyphs/glyphs-3.html (注意)縦書きと横書きでoriginが変わる CoreTextで取得可能な個別の文字位置/大きさの情報
16.
3. フォントの内部情報と縦書き実現の仕組み
17.
引用:狩野宏樹(株式会社イワタ)『フォントのしくみ』
18.
フォントの内部情報 • OS/2 • グリフの幅・高さ •
Cmap(Character Map) • 文字コードとグリフ(GID/CID)と対応情報 • GSUB(Glyph Substitution) • グリフの置き換えの指示情報 • タグで管理(vert/liga/jis83…) • GPOS(Glyph Positioning) • グリフの位置の指示情報 • タグで管理(kern/vkrn/…) 参考:http://www.morisawa.co.jp/font/about/knowledge/format/ot_ex.html
19.
引用:狩野宏樹(株式会社イワタ)『フォントのしくみ』
20.
引用:狩野宏樹(株式会社イワタ)『フォントのしくみ』
21.
フォントの情報を実際に見てみる • 使用ソフト • OTMaster
Light 2.0 (Mac/Windows) グリフ編集ソフト(有料)の評価版 http://www.fontmaster.nl/english/downloads.html Cf.類似ソフト: • FontForge グリフ編集ソフト(OpenSource) http://fontforge.org/
24.
ヒラギノ明朝(HiraMinProN-W3) - Apple
Japan 1-5
25.
拡大
26.
GSUB
34.
GPOS
37.
このように、フォント内部には適切な表示を行うために 数多くの情報を持っている。 ただし、 情報をどのように使うかは、OS/アプリの実装 に委ねられている。
38.
4. まとめ
39.
• 高品質なフォントは、収録グリフ(字形)が多 いだけでなく、美しい字組を行うための情報が 数多く収められている。 • ただし、フォントの情報をどのように使うかは、 OSやアプリの実装(iOSの場合はCoreText)に 委ねられている。 •
iOS(CoreText)の場合、縦書きレイアウトと縦 書きグリフの使用には対応している。個別の字 送り(GPOS)等、対応していないものもある。 必要な場合は、アプリ側で実装する必要がある。
40.
その他 参考文献 • 狩野宏樹(株式会社イワタ)『フォントのしくみ』 http://www.iwatafont.co.jp/news/img/about_font.pdf •
DTPの勉強会 第3回「フォント」(書体の研究・文字コードとフォン ト・グリフ・文字化け・異体字)動画・スライドデータ https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&k=detail&c=11 &n=247&mod=TileViewer&s=12&w=descend&u=9&uni=9&search%3A14%3Af=& search%3A14%3At= • HDMT Journal Vol008 フォントとコードのはなし『第四回 CoreTextで描写する(1)』 (電子書籍) • yusuga/ CoreTextSample https://github.com/yusuga/CoreTextSample