python如何删除ttf文件中除了选中字符的所有字符并另存
时间: 2024-05-02 09:20:27 浏览: 100
下面是一个简单的Python程序,可以删除TTF文件中除了选中字符的所有字符并另存:
```python
from fontTools.ttLib import TTFont
# 选中的字符
selected_chars = ['A', 'B', 'C', 'D']
# 原始TTF文件路径
input_file = 'original.ttf'
# 新TTF文件路径
output_file = 'new.ttf'
# 加载TTF文件
font = TTFont(input_file)
# 获取所有的字符编码
char_set = set(font.getBestCmap().values())
# 需要删除的字符编码
delete_set = char_set - set(ord(c) for c in selected_chars)
# 删除字符
for code in delete_set:
font['cmap'].getcmap(3, 1).pop(code, None)
# 保存新TTF文件
font.save(output_file)
```
这个程序使用了fontTools库来读取和修改TTF文件。它首先从TTF文件中获取所有的字符编码,然后根据选中的字符编码计算出需要删除的字符编码。最后,它遍历所有需要删除的字符编码,并从TTF文件中删除这些字符。最后,程序将修改后的TTF文件保存到新文件中。
注意:这个程序只能删除整个字符,不能删除字符的部分。如果需要删除字符的部分,需要使用更高级的字体编辑工具。
相关问题
python 从ttf文件删除除了选取的字符以外的所有内容并另存为一个新的ttf文件
这可以使用Python的库`fontTools`来完成。以下是一个示例代码,将从`input.ttf`中删除除了选定字符以外的所有内容,并将结果保存为`output.ttf`:
```python
from fontTools.ttLib import TTFont
# 选定的字符
selected_chars = ['A', 'B', 'C']
# 打开字体文件
font = TTFont('input.ttf')
# 获取包含所有字符的Unicode列表
unicode_list = font.getGlyphOrder()[1:]
# 获取需要保留的字符的Unicode值列表
selected_unicode = [ord(c) for c in selected_chars]
# 计算需要删除的字符的Unicode值列表
to_remove_unicode = [u for u in unicode_list if u not in selected_unicode]
# 删除需要删除的字符的Glyph
for u in to_remove_unicode:
font['glyf'].glyphs.pop(u, None)
# 保存结果
font.save('output.ttf')
```
在这个示例中,我们首先指定需要保留的字符列表`selected_chars`,然后打开字体文件并获取包含所有字符的Unicode列表`unicode_list`。我们然后使用列表推导式创建一个包含需要保留的字符Unicode值的列表`selected_unicode`,并使用差集操作得到一个包含需要删除的字符Unicode值的列表`to_remove_unicode`。
接下来,我们遍历`to_remove_unicode`列表并使用`pop()`方法从字体文件中删除对应的Glyph。最后,我们将结果保存到一个新的ttf文件中。
请注意,这个示例代码只处理了字体文件中的Glyph,而没有处理其他元素,例如Kerning或GPOS表。如果您需要处理这些元素,请查看`fontTools`库的文档以了解更多信息。
python如何从ttf文件中选中一个字符生成一个新的ttf文件
要从ttf文件中选中一个字符生成一个新的ttf文件,可以使用Python中的fontTools库。以下是一个简单的示例:
```python
from fontTools.ttLib import TTFont
# 打开原始ttf文件
font = TTFont('original.ttf')
# 获取要选中的字符的unicode编码
unicode_value = ord('A')
# 从原始字体中删除除了选中字符以外的所有字符
cmap = font['cmap'].getcmap(3, 1).cmap
for glyph in font['glyf'].glyphs.values():
if glyph.isWorthOutputting():
if glyph.unicode and glyph.unicode != unicode_value:
glyph.clear()
# 保存新的ttf文件
font.save('new.ttf')
```
在这个示例中,我们打开了原始的ttf文件,并获取了要选中的字符的unicode编码。然后,我们遍历了所有的字形,并删除了除了选中字符以外的所有字符。最后,我们将结果保存到一个新的ttf文件中。
请注意,这个示例只是一个简单的演示,实际上可能需要更复杂的逻辑来处理不同的字形和字体文件。
阅读全文