fonttools - 操作字体

在这里插入图片描述


一、关于 fonttools

fontTools是一个用于操作字体的库,用Python编写。这 项目包括TTX工具,可以转换TrueType和OpenType XML文本格式之间的字体,也称为TTX。

它 支持TrueType、OpenType、AFM,并在一定程度上支持Type 1和一些 该项目拥有 MIT open-source licence。除其他外,这意味着您可以免费使用它。


其它文档/教程

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
  • Lib/fontTools/ttLib/woff2.py
    压缩/解压缩WOFF 2.0网页字体的模块;它需要:
    • brotli: Python的绑定 Brotli压缩库。
      Extra : woff
  • Lib/fontTools/ttLib/sfnt.py
    为了更好地压缩WOFF 1.0网页字体,可以使用以下模块 而不是内置的zlib库:
    • zopfli: Python的绑定 Zopfli压缩库。
      Extra : woff
  • Lib/fontTools/unicode.py
    在转储cmap表时显示Unicode字符名称 对于ttx,我们使用标准库中的unicodedata模块。 其中包含的版本因不同的Python版本而异。 要使用最新的可用数据,您可以安装:
    • unicodedata2unicodedatabackport for Python 3. x更新到最新的Unicode 版本15.0。
      Extra : unicode
  • 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的模块。
  • Lib/fontTools/misc/symfont.py
    用于符号字体统计分析的高级模块;它需要:
    • 症状:Python库 符号数学。
      Extra : symfont
  • Lib/fontTools/t1Lib.py
    获取Macintosh PostScript Type 1字体的文件创建者和类型 在Python 3上,您需要安装以下模块,如旧的MacOS 模块不再包含在Mac Python中:
    • xattr: Python包装器 扩展文件系统属性(仅限macOS平台)。
      Extra : type1
  • Lib/fontTools/ttLib/removeOverlaps.py
    通过合并重叠的轮廓和组件来简化TrueType字形。
    • skia-pathops:蟒蛇 Skia库的PathOps模块的绑定,执行布尔值 路径上的操作(联合、交叉点等)。
      Extra : pathops
  • Lib/fontTools/pens/cocoaPen.pyLib/fontTools/pens/quartzPen.py
    使用CocoaNSBezierPathCGPath绘制字形的笔需要:
    • 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作为光栅图像绘制字形的笔需要:
  • Lib/fontTools/ttLib/tables/otBase.py
    使用Harfbuzz库使用hb_repack方法序列化GPOS/GSUB,需要:
    • uharfbuzz:流线型Cython harfbuzz整形引擎的绑定
      Extra : repacker

三、如何制作新版本

  1. 更新NEWS.rst自上次发布以来的所有更改 每个PR的更改日志条目,用一两个简短的句子总结它, 以及PR的链接和PR解决的相关问题。不 放一个新标题,下一个命令会为您完成。
  2. 使用语义版本控制来决定新版本是“主要”、“次要”还是“补丁”版本。它通常是后两个版本之一,这取决于是否添加了新的向下兼容的API,或者只是修复了一些错误。
  3. 在venv内部,首先执行pip install -r dev-requirements.txt,然后运行 从main分支的顶端python setup.py release命令。 默认情况下,这只会颠簸第三个或“补丁”数字,除非你通过--major--minor分别颠簸第一个或第二个数字。 这会颠簸包版本字符串,提取自最新版本以来的更改 来自NEWS.rst的版本,并使用该文本创建带注释的git标记 (或者一个签名的git标签,如果你传递--sign选项和你的git和Github 帐户配置为签署提交 使用GPG密钥)。 它还提交了一个额外的版本提升,它打开了主分支 随后的发育周期
  4. 通过运行命令,将标签和提交都推送到上游存储库 git push --follow-tags注意:它也可以推送其他本地标签,be 小心。
  5. 让CI构建轮子和源分发包并验证两者都上传到Python包索引(PyPI)。
  6. [可选]转到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(六)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值