0 序
- python的图形绘制库matplotlib默认不支持中文,但可支持通过集成第三方的中文字体文件后渲染中文:
- import numpy as np
- from matplotlib import pyplot as plt
- import matplotlib
- # 加载指定的字体文件
- # 1. fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径;
- # 2. 支持 otf / ttf 等文件格式的字体文件
- # zhFont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
- zhFont = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf") # (中文) 黑体常规
- x = np.arange(1, 11)
- y = 2 * x + 5
- # print(x) # [ 1 2 3 4 5 6 7 8 9 10]
- # print(y) # [ 7 9 11 13 15 17 19 21 23 25]
- plt.title("标题测试", fontproperties=zhFont)
- # fontproperties 设置中文显示,fontsize 设置字体大小
- plt.xlabel("x 轴", fontproperties=zhFont)
- plt.ylabel("y 轴", fontproperties=zhFont)
- plt.plot(x, y)
- plt.show()
复制代码
- Web前端(浏览器)
- Adobe Photoshop / ...
- Python的图形绘制库matplotlib
- ...
理解计算机字体文件的运行原理及TTF、OTF、TTC格式文件的区别
“字体如何让计算机显示文字”的核心逻辑,再拆解不同格式的技术差异。
1 概述:计算机字体文件及其运行原理
计算机字体文件的定义、运行原理
英语:typeface或font family;
指在书法和印刷领域是指文字的式样。
"文字的外在形式特征(字的形体)。就是文字的风格,是文字的外衣。字体的艺术性体现在其完美的外在形式与丰富的内涵之中。字体是文化的载体,是社会的缩影。"
其本质是“文字外观描述数据库”,而非可执行程序(无“运行”概念,只有“加载与渲染”流程)。
其核心逻辑是:通过标准化的数学规则或像素数据,定义每个字符(如字母A、汉字“中”)的形状,再由操作系统/应用程序解析这些规则,最终在屏幕/打印机上呈现文字。
- 在计算机的世界中,屏幕中显示的文字样式都不是输入者实际写的。
输入者写的所有文字,都只是通过输入设备(如键盘)将想要输入的文本字符传递给文件编辑软件(如word、记事本),而在各种文字编辑软件程序中,均有设置字体的入口,而使用相同的字体,写相同的文字,理论显示效果是一致的(排除屏幕分辨率的影响)。
- 字体文件加载
当用户在Word、浏览器等应用中选择某字体(如“微软雅黑”)时,应用会从系统字体目录(如Windows的C:\Windows\Fonts、macOS的/Library/Fonts)中读取对应的字体文件(如msyh.ttc),提取文件内的字体元数据(字体名称、字重、编码范围等)和字形描述数据。
- 字符编码映射
计算机存储文字时用“编码”(如UTF-8、GB2312),而非直接存储形状。字体文件内置“编码-字形映射表”,例如:当用户输入“中”字时,计算机会先将其UTF-8编码(0xE4B8AD)转换为字体文件可识别的“字形索引”(如索引1234),找到对应的字形描述。
- 字形轮廓计算
字体文件通过两种方式定义字形:
- 矢量描述(主流,如TTF/OTF):用“贝塞尔曲线”(由控制点、线段构成的数学公式)描述字形轮廓(如“圆”由4段贝塞尔曲线组成)。优点是放大后无锯齿,适配任意分辨率(屏幕/打印)。
- 点阵描述(早期,如FON):直接存储每个字符在固定尺寸下的像素矩阵(如16×16像素的“中”字)。缺点是放大后模糊,仅适用于低分辨率场景。
- 最终渲染输出
操作系统的“字体渲染引擎”(如Windows的GDI、macOS的Core Text、Linux的FreeType)会根据输出设备(屏幕/打印机)的分辨率,将矢量轮廓转换为像素(屏幕)或墨点(打印),同时优化细节(如抗锯齿、字距调整),最终呈现清晰的文字。
字体文件的种类
格式释义.eotEmbedded OpenType.otfOpenType.svgScalable Vector Graphics. ttfTrueType.woffWeb Open Font FormatTTF、OTF、TTC字体文件的区别与关系
三者均为主流的【矢量】字体格式,核心差异体现在技术起源、功能扩展、文件结构上,关系可概括为“TTF是基础,OTF是升级,TTC是打包”。
字体文件的定义与起源
格式全称起源与定位TTFTrueType Font1985年由【苹果】联合微软推出,初衷是统一“屏幕与打印”的字体渲染(解决早期矢量字体屏幕模糊问题),成为【跨平台】(Windows/macOS)的基础矢量字体格式。OTFOpenType Font1996年由【微软】与【Adobe】联合推出,基于TTF的升级格式,兼容TTF的核心技术,同时整合了Adobe的PostScript字体(Type 1)优势,支持更复杂的排版需求。TTCTrueType Collection【微软】为解决“多字体文件冗余”推出的字体集合格式,本质是将多个【TTF/OTF】字体文件(需同属一个字体家族,如“微软雅黑常规”“微软雅黑加粗”)【打包】成1个文件,减少存储占用。关键技术差异(TTF vs OTF)
- OTF是TTF字体文件的超集,二者在核心渲染逻辑上兼容(都用贝塞尔曲线);但OTF在功能上更强大,具体差异如下:
对比维度TTF(TrueType)OTF(OpenType)字形描述兼容性仅支持TrueType轮廓(二次贝塞尔曲线)兼容两种轮廓:
- TrueType轮廓(兼容TTF)
- PostScript轮廓(三次贝塞尔曲线,精度更高,适合专业印刷)字符集与语言支持早期仅支持基础字符集(如Latin、GB2312),后期扩展有限支持Unicode全字符集(可包含几十万字符),原生支持多语言(如中文、日文、阿拉伯文)、特殊符号( emoji 早期依赖OTF)。排版功能仅支持基础字距、换行,无复杂排版规则支持高级排版功能:
- 连笔字(如英文“fi”自动连笔)
- 上下文替代(如阿拉伯文根据位置变形状)
- 分数显示(如“1/2”自动渲染为“½”)
- 小型大写字母(如“HELLO”→“Hello”的小型大写)专业领域适配适合日常办公、屏幕显示,印刷精度有限适合专业设计(PS、AI)、书籍印刷,支持CMYK色彩模式(TTF仅支持RGB),可嵌入印刷文件确保格式一致。简言之,TTF是“基础款”,OTF是“专业款”,TTC是“打包款”——三者均服务于“清晰、灵活的文字渲染”,只是在功能和存储形式上各有侧重。
TTC与前两者的关系:“打包与被打包”
- TTC不是独立的字体格式,而是“容器”,其核心特点是:
- 内容构成:内部包含多个“字体实例”,这些实例必须属于同一字体家族(如“宋体常规”“宋体加粗”“宋体斜体”),且每个实例本质是完整的TTF或OTF字体(只是被打包在一起)。
- 优势:减少存储冗余。例如,“微软雅黑”家族若拆为单独TTF文件(常规、加粗、细体)需占用约10MB,打包为TTC(msyh.ttc)仅需约6MB,且加载时可快速切换字重。
- 使用场景:系统默认字体多采用TTC(如Windows的simhei.ttc、macOS的PingFang SC.ttc),避免用户目录中堆积大量同家族字体文件。
FAQ for 字体文件
Q:系统字体目录的存放路径?
Q:如何选择或识别三种格式?
- 从使用场景判断
- 日常办公(Word、浏览器):TTF足够,兼容性跨平台(Windows/macOS/Linux均支持);
- 专业设计/印刷(PS、AI、书籍出版):优先选OTF,支持高精度渲染和复杂排版;
- 系统字体/字体家族管理:TTC是默认选择,节省空间且切换方便。
- 从文件特征识别
- 扩展名:直接通过后缀区分(.ttf/.otf/.ttc);
- 内容查看:右键字体文件→“属性”(Windows)或“显示简介”(macOS),TTC会显示“包含X个字体”,而TTF/OTF仅显示单个字体信息。
- 兼容性注意
- OTF向下兼容TTF:支持OTF的软件(如Office 2016+、PS)均可打开TTF,但仅支持TTF的旧软件(如Office 2003)可能无法识别OTF的高级功能;
- TTC需系统支持:主流系统(Windows XP+、macOS 10.2+)均支持TTC,无需额外插件。
Q:OTF 与 TTF 字体文件的相互转换?
- otf 转 ttf : 要将OTF字体文件转换为TTF格式,可使用的在线工具:
- GroupDocs: 上传您的字体文件,选择目标格式为TTF,然后点击转换即可。
https://products.groupdocs.app/zh/conversion/otf-to-ttf
- OnlineConvertFree: 选择OTF文件并将其转换为TTF,支持从电脑、Google云端硬盘或Dropbox上传文件。
https://onlineconvertfree.com/zh/convert-format/otf-to-ttf/
- RunConvert: 上传OTF文件,选择TTF作为输出格式,确保字体质量不受损。
https://www.runconvert.com/zh/otf-to-ttf
- FontConverter: 支持一次上传多个文件并转换为TTF或其他格式。
https://fontconverter.com/zh/
- BigConvert: 提供OTF到TTF的转换工具,并解答常见问题。
https://bigconvert.11zon.com/zh-cn/otf-to-ttf
Q:字体下载网站
- icomoon 字库 : http://icomoon.io
IcoMoon 成立于 2011 年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。该字库内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。
- 阿里 iconfont 字库 : http://www.iconfont.cn/
这个是阿里妈妈 M2UX 的一个 iconfont 字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用 AI 制作图标上传生成。 一大重点是————免费。
- https://www.fontsquirrel.com/
- ...
Y 推荐文献
- [Python/数学] Numpy : 支持多维数组与矩阵运算的线性代数库 - 博客园/千千寰宇
X 参考文献
- 什么是字体 - CSDN
- 字体图标的实现原理 - CSDN
本文作者: 千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |