文章目录
- 一、关于 fonttools
- 二、安装
- 贡献
- 测试
- 可选依赖
- 三、如何制作新版本
- 四、工具
- 五、库
一、关于 fonttools
fontTools是一个用于操作字体的库,用Python编写。这 项目包括TTX工具,可以转换TrueType和OpenType XML文本格式之间的字体,也称为TTX。
它 支持TrueType、OpenType、AFM,并在一定程度上支持Type 1和一些 该项目拥有 MIT open-source licence。除其他外,这意味着您可以免费使用它。
- github : https://github.com/fonttools/fonttools
- 用户手册:https://fonttools.readthedocs.io/en/latest/
- 开发者文档:https://fonttools.readthedocs.io/en/latest/developer.html
其它文档/教程
Python_FontTools使用
https://blog.csdn.net/weixin_43411585/article/details/103484643
二、安装
FontTools 需要Python3.8+。我们尝试和 NumPy 支持的最低Python版本一致(见NEP 29)。
该包列在Python包索引(PyPI)中,因此您可以 安装它与pip:
pip install fonttools
贡献
如果您想为其开发做出贡献,您可以克隆 从GitHub存储库,以“可编辑”模式安装包并 修改源代码。我们建议创建一个虚拟的 环境,使用虚拟环境或 Python 3venv模块。
# download the source code to 'fonttools' folder
git clone https://github.com/fonttools/fonttools.git
cd fonttools
# create new virtual environment called e.g. 'fonttools-venv', or anything you like
python -m virtualenv fonttools-venv
# source the `activate` shell script to enter the environment (Unix-like); to exit, just type `deactivate`
. fonttools-venv/bin/activate
# to activate the virtual environment in Windows `cmd.exe`, do
fonttools-venv\Scripts\activate.bat
# install in 'editable' mode
pip install -e .
测试
要运行测试套件,您需要安装pytest。 当您运行pytest
命令时,测试将针对 安装fontTools包,或在 PYTHONPATH
。
你也可以用tox来 在隔离的虚拟中自动在不同的Python版本上运行测试 环境:
pip install tox
tox
注:当您运行不带参数的tox
时,将对tox.ini
envlist
中列出的所有环境执行测试。系统PATH
上不可用的Python版本将被跳过。
您可以通过-e
选项或TOXENV
环境变量指定特定的测试环境列表:
tox -e py36
TOXENV="py36-cov,htmlcov" tox
可选依赖
目前fontTools
包没有(必需的)外部依赖项 除了Python标准库中包含的模块。
但是,它的一些模块需要一些额外的依赖项,这 需要解锁可选功能。
PyPI发行版fonttools
还支持所谓的 extras
,即 一组描述一组附加依赖项的关键字,可以是 通过pip安装或指定需求时使用。 例如:
pip install fonttools[ufo,lxml,woff,unicode]
此命令将安装fonttools,以及解锁名为 ufo
等额外功能所需的可选依赖项。
Lib/fontTools/misc/etree.py
该模块导出一个类似ElementTree的API,用于 读取/写入 XML文件,以及 允许 使用内置的xml.etree
模块或 lxml。
无论何时出现,后者都是首选, 因为它通常更快、更安全。
Extra :lxml
Lib/fontTools/ufoLib
读写UFO源文件的包;它需要:- fs:(又名
pyfilesystem2
)文件系统 抽象层。 - enum34:内置
enum
模块(仅在Python<3.4上需要)。
Extra :ufo
- fs:(又名
Lib/fontTools/ttLib/woff2.py
压缩/解压缩WOFF 2.0网页字体的模块;它需要:- brotli: Python的绑定 Brotli压缩库。
Extra :woff
- brotli: Python的绑定 Brotli压缩库。
Lib/fontTools/ttLib/sfnt.py
为了更好地压缩WOFF 1.0网页字体,可以使用以下模块 而不是内置的zlib
库:- zopfli: Python的绑定 Zopfli压缩库。
Extra :woff
- zopfli: Python的绑定 Zopfli压缩库。
Lib/fontTools/unicode.py
在转储cmap
表时显示Unicode字符名称 对于ttx
,我们使用标准库中的unicodedata
模块。 其中包含的版本因不同的Python版本而异。 要使用最新的可用数据,您可以安装:- unicodedata2:
unicodedata
backport for Python 3. x更新到最新的Unicode 版本15.0。
Extra :unicode
- unicodedata2:
Lib/fontTools/varLib/interpolatable.py
用于在不同主控之间查找错误轮廓/组件顺序的模块。它需要以下软件包之一来解决所谓的“二分图中的最小权重完美匹配问题”,或赋值问题:- scipy:科学图书馆 对于Python,它在内部使用NumPy 数组,因此非常快;
- Munkres:纯蟒蛇 实现匈牙利或Kuhn-Munkres算法的模块。
要将结果绘制为PDF或超文本标记语言格式,您还需要安装: - Pycero:Python的绑定 开罗图形库。请注意,轮子目前仅适用于 Windows,对于其他平台,请参阅pycero的安装说明。
Extra :interpolatable
Lib/fontTools/varLib/plot.py
用于可视化DesignSpaceDocument和生成的VariationModel的模块。- matplotlib:2D绘图库。
Extra :plot
- matplotlib:2D绘图库。
Lib/fontTools/misc/symfont.py
用于符号字体统计分析的高级模块;它需要:- 症状:Python库 符号数学。
Extra :symfont
- 症状:Python库 符号数学。
Lib/fontTools/t1Lib.py
获取Macintosh PostScript Type 1字体的文件创建者和类型 在Python 3上,您需要安装以下模块,如旧的MacOS
模块不再包含在Mac Python中:- xattr: Python包装器 扩展文件系统属性(仅限macOS平台)。
Extra :type1
- xattr: Python包装器 扩展文件系统属性(仅限macOS平台)。
Lib/fontTools/ttLib/removeOverlaps.py
通过合并重叠的轮廓和组件来简化TrueType字形。- skia-pathops:蟒蛇 Skia库的PathOps模块的绑定,执行布尔值 路径上的操作(联合、交叉点等)。
Extra :pathops
- skia-pathops:蟒蛇 Skia库的PathOps模块的绑定,执行布尔值 路径上的操作(联合、交叉点等)。
Lib/fontTools/pens/cocoaPen.py
和Lib/fontTools/pens/quartzPen.py
使用CocoaNSBezierPath
或CGPath
绘制字形的笔需要:- PyObjC之间的桥梁 Python和Objective-C运行时(仅限macOS平台)。
Lib/fontTools/pens/qtPen.py
使用Qt的QPainterPath
绘制字形的笔需要:- PyQt5:Python绑定 Qt跨平台UI和应用程序工具包。
Lib/fontTools/pens/reportLabPen.py
将字形绘制为PNG图像的笔需要:- Reportlab: Python工具包 用于生成PDF和图形。
Lib/fontTools/pens/freetypePen.py
使用FreeType作为光栅图像绘制字形的笔需要:- freetype-py: Python绑定 对于FreeType库。
Lib/fontTools/ttLib/tables/otBase.py
使用Harfbuzz库使用hb_repack
方法序列化GPOS/GSUB,需要:- uharfbuzz:流线型Cython harfbuzz整形引擎的绑定
Extra :repacker
- uharfbuzz:流线型Cython harfbuzz整形引擎的绑定
三、如何制作新版本
- 更新
NEWS.rst
自上次发布以来的所有更改 每个PR的更改日志条目,用一两个简短的句子总结它, 以及PR的链接和PR解决的相关问题。不 放一个新标题,下一个命令会为您完成。 - 使用语义版本控制来决定新版本是“主要”、“次要”还是“补丁”版本。它通常是后两个版本之一,这取决于是否添加了新的向下兼容的API,或者只是修复了一些错误。
- 在venv内部,首先执行
pip install -r dev-requirements.txt
,然后运行 从main
分支的顶端python setup.py release
命令。 默认情况下,这只会颠簸第三个或“补丁”数字,除非你通过--major
或--minor
分别颠簸第一个或第二个数字。 这会颠簸包版本字符串,提取自最新版本以来的更改 来自NEWS.rst
的版本,并使用该文本创建带注释的git标记 (或者一个签名的git标签,如果你传递--sign
选项和你的git和Github 帐户配置为签署提交 使用GPG密钥)。 它还提交了一个额外的版本提升,它打开了主分支 随后的发育周期 - 通过运行命令,将标签和提交都推送到上游存储库
git push --follow-tags
注意:它也可以推送其他本地标签,be 小心。 - 让CI构建轮子和源分发包并验证两者都上传到Python包索引(PyPI)。
- [可选]转到fonttoolsGithub版本 页面并创建一个新版本,复制粘贴git标签的内容 消息。这样,发行说明被很好地格式化为降价,并且 观看repo的用户将收到一封电子邮件通知。总有一天我们会 也自动化。
四、工具
FontTools包括以下命令行实用程序:
pyftmerge
:用于合并字体的工具;请参阅fontTools.merge
pyftsubset
:字体子集工具;参见fontTools.subset
ttx
:用于在OTF和XML表示之间转换的工具;参见fontTools.ttx
fonttools
:用于访问其他fontTools组件的元工具。
对于fonttools
,可以使用以下子命令:
cffLib.width
:计算最佳默认WidthX/naminalWidthX值cu2qu
:将UFO字体从三次曲线转换为二次曲线feaLib
:将功能文件(. fea)中的功能添加到OTF字体中merge
:将多个字体合并为一个subset
:OpenType字体子集和优化器ttx
:将OpenType字体转换为XML并返回varLib
:从设计空间文件构建可变字体并母版varLib.instancer
:部分实例化可变字体voltLib.voltToFea
:将MS VOLT转换为AFDKO功能文件。
五、库
字体工程的主要库是fontTools.ttLib.ttFont
,它处理 TrueType/OpenType字体。其他库包括:
fontTools.afmLib
:读写AFM文件fontTools.agl
:访问Adobe字形列表fontTools.cffLib
:Adobe CFF字体的工具fontTools.colorLib
:处理CPAL/COLR字体中的颜色fontTools.cu2qu
:将三次曲线转换为二次曲线fontTools.designspaceLib
:读写设计空间文件fontTools.encodings
:支持与字体相关的编码fontTools.feaLib
:读写AFDKO功能文件fontTools.fontBuilder
:从头开始构建TTF/OTF字体fontTools.merge
.合并:用于合并字体文件的工具fontTools.subset
:OpenType字体子集和优化fontTools.svgLib.path
:将SVG路径绘制到字形上fontTools.ttLib
:读/写OpenType和TrueType字体fontTools.ttx
:在OTF和XML表示之间转换fontTools.ufoLib
:读取和写入UFO文件fontTools.unicodedata
:在Unicode和OpenType脚本信息之间转换fontTools.varLib
:处理’gvar’风格的字体变化fontTools.voltLib
:处理Visual OpenType布局工具(VOLT)文件
2024-08-03(六)