当前位置: 首页 > news >正文

更复杂的代码,为何跑得快了倍?一次Draw Call优化引发的思考

莱怀挪促什么是Character?什么是Glyph?Character和Glyph是否一一对应?我们常说的Font又包含哪些东西?如果要自己实现一套文本的分词、测量和布局,又需要理清楚哪些概念?ascent、descent、lineHeight之间的关系是怎么样的?

本文将尽量以简洁易懂的方式来解释以上问题,也可以提前Mark起来,作为日后的速查手册。

二、Character

Character也叫字符,是一个抽象概念,比如字母A、中文你等都可以视为一个字符,它只是一个语义单位,不关心具体长什么样。

三、Glpyh

Glpyh也叫字形,表示字符的绘制方式;一个字符可以有多种方式绘制,比如字母A,可以有不同的大小、粗细、斜体、衬线等,但都是同一个字符;这些不同的绘制方式,都叫字形。

在这里插入图片描述

3.1 Character与Glyph的关系

字符与字形并非一一对应关系,一个字符可以由多个字形表示,比如é可以是e和重音符号′的组合,在一些连字情况下,一个字形也可以代表多个字符,如下:

在这里插入图片描述

四、Font

4.1 Typeface

指一套具有统一设计风格的Font集合,它是一种设计概念,而不是具体的文件

4.2 Font

Font可以理解成Typeface的某个具体实现。

以Helvetica为例:

Typeface:Helvetica

Font:

Helvetica Regular.ttf

Helvetica Bold.ttf

Helvetica Italic.ttf

Helvetica Bold Italic.ttf

4.3 Font Family

Font Family是一组属于同一个Typeface的字体(Fonts),它们共享设计风格,只是字重/宽度/样式不同。

比如:Helvetica是一个Font Family,里面包含字体:

Helvetica Regular

Helvetica Bold

Helvetica Italic

Helvetica Bold Italic

4.4 Font Descriptor

Font Descriptor(字体描述符)是一种属性集合(Font Family、Font Weight、样式 (italic/oblique)、大小等),用来描述或查询一个字体;它不是字体文件,而是一个“过滤条件”或“配置对象”,在 CoreText 里对应 CTFontDescriptor。

Font Descriptor可以用于匹配系统中符合条件的字体,也可以用它来派生一个具体的CTFont,如:

// 这里的 descriptor 只是描述条件,真正的字体对象是 font

let descriptor = CTFontDescriptorCreateWithAttributes([

kCTFontFamilyNameAttribute: "Microsoft YaHei",

kCTFontWeightTrait: 0.8

])

let font = CTFontCreateWithFontDescriptor(descriptor, 14, nil)

4.5 Font Collections

Font Collections是一组字体的集合,通常用于检索和筛选,在 CoreText 里对应CTFontCollection。

它可以包含系统中所有可用字体,也可以按条件过滤出子集,主要用途有:

枚举系统安装的字体

根据 Font Descriptor 找到所有匹配的字体

做字体选择器 UI(比如 Word 里的字体下拉框)

4.6 小结

在这里插入图片描述

4.7 Glyph与Font的关系

简单理解,Font里存储了Glyph的绘制样式,Glyph与Unicode的映射关系等。

Font里有各种各样的表,存储了Unicode code point与GlyphID的映射关系,每个Glyph绘制时的advance width 和left side bearing等,后续会有单独的文章详细解析Font文件内容,这里先理解二者的概念。

五、文字排版的基本概念

基本概念 解释

metrics 由字体设计师提供,用于描述每个Glyph周围的间距

advance width 前进宽度,基线方向到下一个Glyph origin的距离,或者理解为字形绘制完后,光标应该前进多少距离

left-side bearing Glyph origin与Glyph左侧的间距

right-side bearing Glyph右侧与advance width终点的距离

ascent Glyph origin到Font中最高Glyph的顶部距离

descent Glyph origin到Font中最低Glyph的底部距离

bounding box

bounding rectangle 包含Glyph可视区域(注意非advance width)最小rect

kerning 通常,Glyph一般按advance width排列,但为了提高可读性,通常会引入kerning来扩大或缩小两个glyph之间的间距,比如W和A:

在这里插入图片描述

leading/linegap line之间的添加的距离

lineHeight lineHeight = ascent + descent + leading

http://www.jsqmd.com/news/439640/

相关文章:

  • FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
  • Node.js 面试题
  • 强烈安利 9个降AIGC软件:自考降AI率必备工具深度测评
  • Vite 课程
  • 全屋定制如何省心?看看这些用户推荐的工作室,全屋定制/原木定制,全屋定制企业推荐 - 品牌推荐师
  • 2026清洁度检测分析设备多少钱一台?苏州西恩士工业报价及参数详解 - 工业设备研究社
  • TinyVue skills使用指南
  • 三亚靠谱领队阿鑫:官方数据背书的纯玩安心之选 - 速递信息
  • 清洁度检测分析仪哪家好?对比评测后推荐苏州西恩士工业 - 工业设备研究社
  • 2026年3月舆情监控公司推荐,专业服务与品牌保障口碑之选 - 品牌鉴赏师
  • 2026年3月双氧水浓度传感器厂家最新推荐,双氧水含量可靠测量 - 品牌鉴赏师
  • 如何为复杂产线选搬运机器人?2026年AMR厂家全面评测与推荐,直击兼容性与安全痛点 - 品牌推荐
  • 巴西化妆品原料商Assessa在中国区的代理商是谁 - 品牌排行榜
  • 2026年3月平膜压力传感器厂家最新推荐,平膜结构防堵易清洁 - 品牌鉴赏师
  • 2026年3月境外舆情监测公司推荐,专业服务与品牌保障口碑之选 - 品牌鉴赏师
  • LangChain组件 Memory 记忆
  • 2026年AMR搬运机器人厂家推荐:基于技术实力与交付效率的全方位排名 - 品牌推荐
  • QNX-8—QNX常用命令—top/hogs - Hello
  • HTML——用于UI自动化测试
  • 铜层测厚仪:5G通信、新能源汽车等制造的必要工具
  • 2026年Assessa代理商哪家好?实力企业合作案例参考 - 品牌排行榜
  • 2026年Assessa正规代理商推荐及合作价值解析 - 品牌排行榜
  • 2026年3月电动自行车充电桩公司推荐,专业生产与品牌保障口碑之选 - 品牌鉴赏师
  • curl支持ssl报错:(60) SSL certificate problem: unable to get local issuer certificate
  • MySQL InnoDB Cluster节点重新加入集群踩坑案例
  • 2026年3月标书软件提供商推荐,专业服务与品牌保障口碑之选 - 品牌鉴赏师
  • PBootCMS自定义字段为编辑器,出现“字数超出最大允许值,服务器可能拒绝保存”的提示
  • 2026年3月武汉美术培训推荐,专业教学与靠谱师资兼具的优质品牌 - 品牌鉴赏师
  • 2026年AMR搬运机器人厂家推荐:基于多场景实测评价,解决精度与部署痛点并附排名 - 品牌推荐
  • 北京上门回收就找记录者商行,一站式服务,全城上门省心变现 - 品牌排行榜单