问题标签 [ttx-fonttools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
451 浏览

python - FontTools:提取它提供的有用的UTF信息

FontTools正在生成一些具有这种结构中各种细节的 XML

我试图找出这个字体支持的每个字符,所以这些code属性是我感兴趣的。我相信我认为所有 code属性都是 UTF-8 值是正确的:这是正确的吗?我很好奇为什么有两个节点cmap_format_4(它们似乎是相同的,但我还没有用大量的字体测试过,所以如果熟悉这个模块的人肯定知道,那是我的第一个问题)。

为了确保我看到字体中包含的所有字符,我需要组合所有code属性值,还是只需要一个或两个。FontTools 会始终生成这三个 XML 节点,还是数量可变?知道为什么吗?文档有点模糊。

0 投票
1 回答
906 浏览

fonts - Finding the differences in two (probably OpenType) font files

I have the same font in two files, both without file extensions.

Both files begin with the type code OTTO, so the fonts must be OpenType.

When I add the file extension .otf and open the files in a font editor, they both look the same and contain the same glyphs.

But when I diff the files in Vim, some parts of the files differ, but since the code is unintelligible to me, I cannot understand what aspect of the font these parts of the files refer to.

How can I find out what the difference between these two font files is?

0 投票
1 回答
749 浏览

python - 使用 fontforge 和 fonttools 创建轻量级后备字体

对于 web 应用程序,如果我的 web 字体不包含字符,我需要一种方法来防止浏览器回退到另一种字体。似乎这样做的唯一方法是向字体堆栈添加另一种字体,其中包括“所有”可能的字符1

已经存在备用 字体,但它们更多的是调试助手,因为它们将代码点显示为数字,因此它们非常重(> 2MB)。

我的用例的后备字体应该只显示类似于框的东西来表示丢失的字符。

我的想法是生成一个只有一个字形的简单字体并应用一个功能文件,它将用这个字形替换所有字形。

我的 fontforge 脚本:

我的功能文件:

但是上面的结果是

随着数字的变化cid00037

如果我使用 Feature 文件中注释掉的 AZ,它就可以工作,所以这种方法似乎并不完全错误。

如果我以 CID 表示法指定范围,为什么 fonttools 找不到字形?是否有另一种方法可以为包含所有字形的 OpenType 功能文件创建一个类?

0 投票
1 回答
12491 浏览

python - 如何读取和打印 ttf 文件的内容?

有什么方法可以打开、读取和写入 ttf 文件?

例子:

多一点:如果我用 windows 字体查看器打开一个 .ttf(字体)文件,我们会看到下图 使用 Windows 字体查看器打开的 .ttf(字体)文件

从中我喜欢以适当的样式提取以下行作为文本。 使用 Windows 字体查看器打开的 .ttf(字体)文件的一部分

0 投票
1 回答
2697 浏览

automation - 将 ttf/woff/woff2 文件重命名为 PostScript Font Name with Script

我是一名印刷师,使用许多文件名不正确或不完整的字体。我在 Mac 上,一直在使用HazelAppleScriptAutomator工作流程,试图自动重命名这些文件*。我需要一个脚本来用字体ttf的. 我知道可以检索我需要的 PostScript 名称值的工具(/ 、等),但缺乏为我的目的编写脚本的编程知识。我只设法设置了一个可以在添加任何匹配某些参数的文件时运行脚本的监视目录。woffwoff2postscriptNamefc-scanfontconfigTTX

*为了澄清,我说的是仅更改文件名,而不是存储在字体中的实际名称。如果可能的话,我也对任何兼容语言的脚本或脚本工作流程持开放态度,例如这篇文章引用了通过.osascript

我咨询过
的 StackExchange 帖子:如何从 OTF 或 TTF 文件中获取字体名称?
如何在 OS X 中获取 TTF 字体的 PostScript 名称?
如何更改字体名称?
在 macOS 中自动重命名文件

其他:
https ://github.com/dtinth/JXA-Cookbook/wiki/Using-JavaScript-for-Automation
https://github.com/fonttools/fonttools
https://github.com/devongovett /fontkit
https://www.npmjs.com/package/rename-js
https://opentype.js.org/font-inspector.html
http://www.fontgeek.net/blog/?p=343
https: //www.lantean.co/osx-renaming-fonts-for-free

编辑:应要求添加了以下内容。
1) 一个有点典型的网络字体的屏幕截图,说明字体系列和样式名称的表单字段如何经常不完整、空白或包含非法字符。
2)描述的woff文件(也作为base64)。 谢谢大家!截屏

0 投票
1 回答
2371 浏览

python - 使用 Python 进行 TTF 字形渲染

我正在尝试从 TTF 文件为某些字形生成位图,并意识到当您尝试在没有 cmap 条目的情况下生成字形时,没有现成的解决方案。我正在使用印度字体,因此我需要提取一些半字形。

我找到了 fonttools 并能够用它解析我的 TTF 文件。我可以验证我确实拥有可以在字形查看器中查看的所有字形的对象。我现在试图找出是否可以使用 fonttools 或任何类似的库将这些字形呈现为位图?

从字形查看器中抓取屏幕不是一种选择,因为图像的质量不会受到影响。我发现很多工具可以影响质量,但无法生成半字形或复合字形。

在这方面的任何帮助也将不胜感激。

0 投票
0 回答
128 浏览

python - 节点字体工具 - 未定义符号:Py_Initialize

我在我的 NodeJS 应用程序中使用 npm 模块fonttols - https://github.com/dfrankland/node-fonttools

在我的本地开发环境(Mac)中一切正常,但是当我尝试在亚马逊 EC2 上基于 ubuntu 的 docker 映像中启动我的应用程序时,出现以下错误:

我的 docker 镜像上安装了 python。

我还创建了一个关于它的 GitHub 问题:GitHub 问题

0 投票
1 回答
239 浏览

python-2.7 - 安装 fontmake 后出现错误消息:“没有名为 py23 的模块”

我已经通过 pip 安装、卸载、重新安装了 FontTools 和 Fontmake。

但是,每当我尝试在终端中调用 Fontmake 时,都会出现以下错误。Py23 似乎是 Fonttools 依赖项,它也已安装。

提前感谢您的帮助!

回溯(最后一次调用):文件“/usr/local/bin/fontmake”,第 9 行,在 load_entry_point('fontmake==1.3.1.dev0', 'console_scripts', 'fontmake')() 文件“/ System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py”,第 357 行,在 load_entry_point 返回 get_distribution(dist).load_entry_point(group, name) 文件“/System/Library/Frameworks /Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py”,第 2394 行,在 load_entry_point 返回 ep.load() 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/ lib/python/pkg_resources.py”,第 2108 行,在 load entry = import (self.module_name, globals(),globals(), [' name ']) 文件“/Library/Python/2.7/站点包/fontmake/.py”,第 18 行,从 fontmake.font_project 导入 FontProject 文件“/Library/Python/2.7/site-packages/fontmake/font_project.py”,第 37 行,从 defcon 导入字体文件“/Library/Python/2.7 /site-packages/defcon/ init .py”,第 10 行,从 defcon.objects.font 导入字体文件“/Library/Python/2.7/site-packages/defcon/objects/font.py”,第 6 行,在from ufoLib import UFOReader, UFOWriter File "/Library/Python/2.7/site-packages/ufoLib/init .py ", line 6, in from fontTools.misc.py23 import basestring, unicode ImportError: No module named py23

0 投票
1 回答
1139 浏览

python - fonttools 读取 cmap 数据

背景:

使用 fonttools 我想将像“ل”(U+0644)这样的字符更改为它的初始形式“ﻟ”(U+FEDF)。我可以通过 4 个步骤完成此操作:

  1. 使用 fonttools,将字体数据保存为 xml,然后通过它解析

    font = TTFont(fontPath) font.saveXML("tempfont.xml")

  2. 在 cmap 表中找到与 U+0644 关联的名称(假设名称为“isolam”)

  3. 在 GSUB 表中找到“init”表并找到具有“isolam”的“in”属性的条目,然后读取它的“out”属性(假设它是“initlam”)

  4. 最后在 cmap 表中搜索名称“initlam”并获取代码点

这个过程非常慢,我认为这是因为 xml 文件是硬写的,然后从那里读取,而且还有很多迭代 xml 文件。

问题:

我现在尝试直接使用 TTFont 对象,而不是保存 xml 文件。但我从 cmap 读取代码点时遇到问题。

但结果似乎是胡言乱语。它很长,所以我只展示一些:

b'\x00`\x00@\x00\x05\x00\x00!\x00+\x00/\x009\x00:\x00>\x00[\x00]\x00{\x00}\x00\xab\x00\xbb \

现在我希望它返回一个字典,其中代码点作为键,名称作为值,或者可能是一个元组列表。

那么如何以可理解的格式访问 cmap 数据呢?

或者我怎样才能得到字形的名称,给定相关的代码点,反之亦然?

0 投票
2 回答
239 浏览

fonts - 如何比较不同粗细的 OpenType 字体是否相同?

我有一堆不同粗细和样式的 OpenType 字体文件(例如,ComicSans100.otf、ComicSans200.otf、ComicSans300.otf 和 TimeNewRoman.otf 和 TimesNewRomanItalic.otf)。向我提供这些文件的人不确定是否修改了不同字体的粗细和样式。例如,其中的字符ComicSans400.otf来自ComicSans100.otf400 的权重,但经过调整以使其看起来更好。

我想知道是否有办法确保如果我采用 ComicSans100.otf 并为其应用 400 的权重,所有字符看起来都与 ComicSans400.otf 中的字符相同。

我问这个的原因是我想在 Android 应用程序中使用这些字体。每种字体都会增加应用程序的大小。