fonttools - 操作字体

news2024/12/23 1:29:02

在这里插入图片描述

文章目录

    • 一、关于 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
  • 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版本而异。 要使用最新的可用数据,您可以安装:
    • unicodedata2: unicodedatabackport 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的模块。
    • matplotlib:2D绘图库。
      Extra : plot
  • 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作为光栅图像绘制字形的笔需要:
    • freetype-py: Python绑定 对于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(六)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cesium加载wms与arcgis服务

1、加载geoserver的wms服务 2、加载arcgis服务

idea使用free流程,2024idea、2023idea都可以安装免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…

C++计算二维坐标欧式距离

1.何为欧式距离 在欧几里得空间中&#xff0c;点x (x1,…,xn)和 y (y1,…,yn)之间的欧氏距离为 2.C实现计算两点欧氏距离 point1(x1, y1): (1,3) point2(x2, y2): (2,6) #include <iostream> #include <cmath>using namespace std;int main() {struct point {…

【Android驱动08】Sensor传感器框架以及驱动移植和调试方法(Kernel层部分)

接续上一节&#xff0c;本文主要介绍驱动部分的客制化 1&#xff0c; hardware层 通过系统调用open,read,write对sys/class/sensor/m_acc_misc读写操作 路径&#xff1a;vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/Acceleration.cpp 直接操作/sys/class/sensor…

pytorch基础模块:Tensorboard、Dataset、Transforms、Dataloader

Tensorboard、Dataset、Transforms、Dataloader 该文档主要参考【土堆】的视频教程&#xff1a;pytorch入门教程–土堆 一、Tensorboard 安装tensorboard&#xff1a;pip install tensorboard 使用步骤&#xff1a; 引入相关库&#xff1a;from torch.utils.tensorboard i…

DDL、DML、DQL、DCL具体实例与关系

一、DDL、DCL、DML、DQL 通过二维表的形式&#xff0c;更加清晰直观的学习、对比其关系。 DDL DCL DML DQL 英文释义 Data Defination Language 数据库定义语言 Data Control Language 数据库控制语言 Data Manipulation Language 数据操作语言 Data Query Language 数…

PyMuPDF-Guide

本文翻译整理自&#xff1a; https://pymupdf.readthedocs.io/en/latest/how-to-open-a-file.html 文章目录 一、打开文件1、支持的文件类型2、如何打开文件打开一个错误的文件扩展名 3、打开远程文件从云服务打开文件 4、以文本形式打开文件例子打开一个C#文件打开一个XML文件…

按摩行业的革新者:从挑战到辉煌的转型之路

在时代浪潮的推动下&#xff0c;一个勇于创新的团队于2018年毅然踏入按摩服务市场&#xff0c;创立了一家颠覆传统的按摩店。面对行业内的激烈竞争与瞬息万变的市场环境&#xff0c;他们凭借独树一帜的经营模式和不懈的努力&#xff0c;不仅稳固了市场地位&#xff0c;更在去年…

使用Greenhills生成Lib并使用Lib的两种方法

文章目录 前言GHS工程生成libmake方式生成liblib的使用总结 前言 在软件交付过程&#xff0c;如果不交付源代码&#xff0c;可以将源码编译之后生成lib文件提供给客户。本文介绍GHS中生成lib的两种方法&#xff0c;一种基于GHS工程&#xff0c;一种基于make文件。生成完lib后的…

uniapp自定义网格布局用于选择金额、输入框焦点事件以及点击逻辑实战

样式 <view class="withdraw-section"><text class="section-title">提现金额</text><view class="amount-options"><view v-for="(item, index) in list" :key="index" class="amount-opt…

使用Leaflet进行船舶航行警告区域绘制实战

目录 前言 一、坐标格式转换 1、数据初认识 2、将区域分割成多个点 3、数据转换 4、数据转换调用 二、WebGIS展示空间位置信息 1、定义底图 2、Polygon的可视化 3、实际效果 三、总结 前言 通常而言&#xff0c;海事部门如海事局&#xff0c;通常会在所述的管辖区域内…

Java从入门到精通(十五) ~ IO流

晚上好&#xff0c;愿这深深的夜色给你带来安宁&#xff0c;让温馨的夜晚抚平你一天的疲惫&#xff0c;美好的梦想在这个寂静的夜晚悄悄成长。 目录 前言 什么是IO流&#xff1f; IO流的作用&#xff1a; 一、基础流 1. 字节流 1.1 字节输入流 FileInputStream 1.2 字节…

找到第一个满足条件的格值

表格第1列是科目&#xff0c;之后几列是每次的考试成绩&#xff0c;顺序排列。 ABCDE1Art03.676.27.82History3.786.217.29.83Maths5.66.36.68.9 要求根据指定的科目和成绩&#xff0c;找到该科目中大于等于该成绩的第1个格值&#xff0c;比如参数是Maths、6.5时&#xff0c;…

element-ui简单入门1.0.0

第一篇&#xff1a;table标签速用 总结&#xff1a;建楼前&#xff0c;先打地基<el-table></el-table>&#xff0c;打完地基看高度&#xff0c;一层楼4米&#xff0c;80米20个<el-table-column></el-table-column>&#xff0c;每次楼的名字是label 第…

[翻译] Asset Administration Shells

关于资产管理外壳 (AAS) 资产管理外壳 (AAS) 是工业4.0中的关键概念&#xff0c;为产品、资源&#xff08;如设备&#xff09;和过程提供信息隐藏和更高层次的抽象。AAS 是技术和设备无关的机器可读描述&#xff0c;提供访问资产属性和功能的统一接口。与现有解决方案不同&…

C# 下的限定符运算详解(全部,任意,包含)与示例

文章目录 1.限定符概述2. 全部限定符运算&#xff08;All&#xff09;3. 任意限定符运算&#xff08;Any&#xff09;4. 包含限定符运算&#xff08;Contains&#xff09;总结 当我们在C#编程中需要进行条件判断或集合操作时&#xff0c;限定符&#xff08;qualifiers&#xff…

Vue项目启动ESLint报错no-unused-vars解决办法

目录 原因分析解决方法 Vue项目启动时报错如下 ✘ http://eslint.org/docs/rules/no-unused-vars index is assigned a value but never usedsrc\views\friend\list.vue:206:17const index this.tableList.indexOf(v)^原因分析 ESLint是一个在JavaScript代码中识别和报告问…

【传知代码】辅助任务改进社交帖子多模态分类(论文复现)

在当今数字化社交时代&#xff0c;社交媒体平台如同人们生活的一部分&#xff0c;每天数以亿计的帖子在网络上涌现。这些帖子不仅仅是信息的载体&#xff0c;更是人们思想、情感和行为的折射。然而&#xff0c;要准确理解和分析这些多样化的社交帖子&#xff0c;仅依靠文本内容…

请问如何做好软件测试工作呢?

一、明确测试目标和范围 理解测试目的&#xff1a;在开始测试之前&#xff0c;首先要明确测试的目标和范围&#xff0c;确保测试计划 与需求相匹配。这有助于测试人员聚焦在关键功能上&#xff0c;避免浪费时间和资源。制定详细的测试计划&#xff1a;根据项目需求&#xff0…

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求 从网易新闻的科技模块爬取今日热点的列表数据&#xff0c;其中包括标题、图片、标签、发表时间、路径、详细文本内容&#xff0c;最后导出这些列表数据到Excel中。 网易科技新闻网址&#xff1a;https://tech.163.com 2. 解决步骤 2.1 前期准备 爬虫脚本中需要引用…