在fontTools
之上进行友好的字体操作。 ?
pip 安装 python-fontbro
只需导入字体类:
from fontbro import Fontfont = Font("fonts/MyFont.ttf")# 或者您可以使用任何类似文件的对象:with open("fonts/MyFont.ttf") as fh:font = Font(fh)
clone
close
from_collection
get_characters
get_characters_count
get_family_classification
get_family_name
get_features
get_features_tags
get_filename
get_fingerprint
get_fingerprint_match
get_format
get_glyphs
get_glyphs_count
get_image
get_italic_angle
get_name
get_names
get_style_flag
get_style_flags
get_style_name
get_svg
get_ttfont
get_unicode_block_by_name
get_unicode_blocks
get_unicode_script_by_name
get_unicode_scripts
get_variable_axes
get_variable_axes_tags
get_variable_axis_by_tag
get_variable_instances
get_variable_instance_by_style_name
get_variable_instance_closest_to_coordinates
get_version
get_vertical_metrics
get_weight
get_width
is_color
is_monospace
is_static
is_variable
rename
sanitize
save
save_as_woff
save_as_woff2
save_to_file_object
save_variable_instances
set_family_classification
set_family_name
set_name
set_names
set_style_flag
set_style_flags
set_style_flags_by_subfamily_name
set_style_name
set_vertical_metrics
subset
to_sliced_variable
to_static
clone
"""创建一个新的 Font 实例,读取相同的二进制文件。"""font_clone = font.clone()
close
"""关闭包装的TTFont实例。"""font.close()
from_collection
"""从字体集合文件 (.ttc / .otc) 中获取 Font 对象列表:param filepath: 文件路径:类型 filepath: str 或 pathlib.Path:returns: 字体对象列表。:rtype: list" ""fonts = Font.from_collection(filepath="my-font-collection.ttc")
get_characters
"""获取字体字符。:paramignore_blank: 如果为 True,则不会返回没有轮廓的字符。:typeignore_blank: bool:returns: 字符。:rtype: dicts 生成器:raises TypeError: 如果无法找到字体中的“最佳”unicode cmap 字典。"""chars = font.get_characters(ignore_blank=False)
get_characters_count
"""获取字体字符数。:paramignore_blank: 如果为 True,则不计算没有轮廓的字符。:typeignore_blank: bool:returns: 字符数。:rtype:int"""chars_count = font.get_characters_count(ignore_blank =错误)
get_family_classification
"""从 OS/2 表中读取 sFamilyClass 字段获取字体系列分类信息。如果 OS/2 表不可用则不返回任何内容。:返回: 包含字体系列分类信息的字典,例如 { "full_name": “无衬线/新怪诞哥特式”,“class_id”:8,“class_name”:“无衬线”,“subclass_id”:5,“subclass_name”: "新怪诞哥特式", }:rtype: dict"""family_classification = font.get_family_classification()
get_family_name
"""以优先顺序 (16, 21, 1) 读取名称记录的家族名称。:返回: 字体家族名称。:rtype: str"""family_name = font.get_family_name()
get_features
"""获取字体 opentype features.:returns: The features.:rtype: list of dict"""features = font.get_features()
get_features_tags
"""获取字体 opentype 特征标签。:returns: 特征标签列表。:rtype: str 列表"""features_tags = font.get_features_tags()
get_filename
"""获取用于将字体保存到文件系统的文件名。:paramvariable_suffix:变量后缀,默认“Variable”:typevariable_suffix:str:paramvariable_axes_tags:变量轴标签标志,如果为True,则轴标签将被附加,例如 '[wght,wdth]':typevariable_axes_tags: bool:paramvariable_axes_values: 变量轴值标志如果True,每个轴值将被附加,例如 '[wght(100,100,900),wdth(75,100,125)]':type variable_axes_values: bool:returns: The filename.:rtype: str"""filename = font.get_filename(variable_suffix="变量”,variable_axes_tags=True,变量轴值=假)
get_fingerprint
"""获取字体指纹:根据字体的图像表示计算出的哈希值。更改文本选项会影响返回的指纹。:param text: 用于生成指纹的文本,默认值:“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789”。:type text :str:returns: 指纹哈希值。:rtype: imagehash.ImageHash"""hash = font.get_fingerprint()
get_fingerprint_match
"""获取此字体与另一种字体之间的指纹匹配。通过检查它们的指纹是否相等(差异 <= 容差)。:param other: 另一种字体,可以是文件路径或 Font 实例。:type other: str 或 Font:param 容差:差异容差,默认 3.:type 容差: int:param text: 用于生成指纹的文本,默认值: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".:type text: str:returns: 包含匹配信息的元组 (match, diff, hash, other_hash).:rtype: tuple"""match, diff, hash, other_hash = font.get_fingerprint_match(other="其他_字体.ttf",公差=10)
get_format
"""获取字体格式:otf、ttf、woff、woff2。:paramignore_flavor:如果为True,则返回未压缩的原始格式。:typeignore_flavor:bool:returns:格式。:rtype:str或None" ""format = font.get_format(ignore_flavor=False)
get_glyphs
"""获取字体字形及其自己的组成。:returns: 字形。:rtype: dicts 生成器"""glyphs = font.get_glyphs()
get_glyphs_count
"""获取字体字形计数。:返回: 字形计数。:rtype: int"""glyphs_count = font.get_glyphs_count()
get_image
"""使用给定选项获取字体渲染某些文本的图像表示。:param text: 在图像中渲染的文本:type text: str:param size: 字体大小:type size: int:param color: 文本color:type color: tuple:param background_color: 背景颜色:type background_color: tuple"""img = font.get_image(text="Hello!", size=48, color=(0, 0, 0, 255),背景颜色=(255, 255, 255, 255))
get_italic_angle
"""获取字体斜体角度。:返回: 角度值,包括后斜体、斜体和罗马标志。:rtype: dict 或 None"""italic_angle = font.get_italic_angle()
get_name
"""通过字体名称表中的标识符获取名称。:param key: 名称 id 或键(例如“family_name”):type key: int 或 str:returns: 名称。:rtype: str 或 None :引发 KeyError: 如果密钥不是有效的名称 key/id"""family_name = font.get_name(key=Font.NAME_FAMILY_NAME)
get_names
"""获取按属性名称映射的名称记录。:返回: 名称。:rtype: dict"""names = font.get_names()
get_style_flag
"""获取读取 OS/2 和 macStyle 表的样式标志。:param key: key:type key: string:returns: 样式标志。:rtype: bool"""flag = font.get_style_flag(Font.STYLE_FLAG_BOLD)
get_style_flags
"""获取读取 OS/2 和 macStyle 表的样式标志。:返回: 表示样式标志的 dict。:rtype: dict"""flags = font.get_style_flags()
get_style_name
"""以优先顺序(17, 22, 2)读取名称记录获取样式名称。:返回: 字体样式名称。:rtype: str"""style_name = font.get_style_name()
get_svg
"""使用给定选项获取渲染某些文本的字体的 SVG 表示。:param text: 要渲染为 SVG 路径的文本。:type text: str:param size: 用于渲染的字体大小文本,以点为单位。:type size: int:returns: 表示渲染文本的 SVG 字符串。:rtype: str"""svg_str = font.get_svg(text="Hello!", size=48)
get_ttfont
"""获取包装的 TTFont 实例。:返回: TTFont 实例。:rtype: TTFont"""ttfont = font.get_ttfont()
get_unicode_block_by_name
"""按名称获取 unicode 块(名称不区分大小写并忽略“-”)。:param name: name:type name: str:returns: 如果名称有效,则为 unicode 块字典,否则为 None。: rtype: dict 或 None"""block = font.get_unicode_block_by_name(name="Basic Latin")
get_unicode_blocks
"""获取 unicode 块及其覆盖率。仅返回覆盖率 >=coverage_threshold (0.0 <=coverage_threshold <= 1.0) 的块。:paramcoverage_threshold: 要返回的块所需的最小覆盖率。:typecoverage_threshold: float:returns: unicode 块列表。:rtype: 字典列表"""blocks = font.get_unicode_blocks(coverage_threshold=0.00001)
get_unicode_script_by_name
"""通过名称/标签获取unicode脚本(名称/标签不区分大小写,忽略“-”)。:param name: name:type name: str:returns: 如果名称/标签是unicode脚本字典有效,否则无。:rtype: dict 或 None"""script = font.get_unicode_script_by_name(name="Latn")
get_unicode_scripts
"""获取 unicode 脚本及其覆盖率。仅返回覆盖率 >=coverage_threshold (0.0 <=coverage_threshold <= 1.0) 的脚本。:paramcoverage_threshold: 要返回的脚本所需的最小覆盖率。:typecoverage_threshold: float:returns: unicode 脚本列表。:rtype: 字典列表"""scripts = font.get_unicode_scripts(coverage_threshold=0.00001)
get_variable_axes
"""获取字体变量axes。:返回:如果字体是可变字体,则为轴列表,否则为None。:rtype:dict或None列表"""axes = font.get_variable_axes()
get_variable_axes_tags
"""获取变量轴标签。:returns: 变量轴标签。:rtype: list 或 None"""axes_tags = font.get_variable_axes_tags()
get_variable_axis_by_tag
"""通过 tag 获取变量轴。:param tag: tag:type tag: string:returns: 通过 tag 变量 axis.:rtype: dict 或 None"""axis = font.get_variable_axis_by_tag(tag="wght" )
get_variable_instances
"""获取变量实例。:返回:如果字体是可变字体,则返回实例列表,否则为 None。:rtype: dict 或 None 列表"""instances = font.get_variable_instances()
get_variable_instance_by_style_name
"""通过样式名称获取变量实例,例如 style_name = 'Bold':param style_name: 样式名称:type style_name: str:returns: 与给定样式名称匹配的变量实例.:rtype: dict 或 None"" “实例= font.get_variable_instance_by_style_name(style_name =“粗体”)
get_variable_instance_closest_to_coordinates
"""获取最接近坐标的变量实例。例如,座标 = {"wght": 1000, "slnt": 815, "wdth": 775}如果坐标未指定某些轴,则使用轴默认值进行查找。 :param 坐标: 坐标:类型坐标: dict:返回: 最接近坐标的变量实例。:rtype: dict 或 None"""instance = font.get_variable_instance_closest_to_coordinates(坐标={"wght": 1000, "slnt": 815, "wdth": 775})
get_version
"""获取字体版本。:返回: 字体版本值。:rtype: float"""version = font.get_version()
get_vertical_metrics
"""获取字体垂直度量。:返回: 包含以下垂直度量的字典: "units_per_em", "y_max", "y_min", "ascent", "descent", "line_gap", "typo_ascender", "typo_descender ”、“typo_line_gap”、“cap_height”、“x_height”、“win_ascent”、 "win_descent":rtype: dict"""metrics = font.get_vertical_metrics()
get_weight
"""获取字体粗细值和名称。:返回: 粗细名称和值。:rtype: dict 或 None"""weight = font.get_weight()
get_width
"""获取字体宽度值和名称。:返回: 宽度名称和值。:rtype: dict 或 None"""width = font.get_width()
is_color
"""判断字体是否为彩色字体。:返回: 如果是彩色字体则返回 True, 否则返回 False.:rtype: bool"""color = font.is_color()
is_monospace
"""确定字体是否为等宽字体。:参数阈值: 具有相同宽度的字形的阈值 (0.0 <= n <= 1.0) 将字体视为等宽字体。:类型阈值: float:返回: True if等宽字体,否则为 False.:rtype: bool"""mono = font.is_monospace(threshold=0.85)
is_static
"""确定字体是否为静态字体。:返回: 如果是静态字体则返回 True,否则返回 False。:rtype: bool"""static = font.is_static()
is_variable
"""确定字体是否为可变字体。:返回: 如果是可变字体,则返回 True,否则返回 False。:rtype: bool"""variable = font.is_variable()
rename
"""根据给定的 family_name 和 style_name (subfamily_name) 重命名字体名称记录 (1, 2, 4, 6, 16, 17)。如果 family_name 未定义,则会自动检测。如果 style_name 未定义,则会自动检测自动检测。:param family_name: 系列名称:type family_name: str:param style_name: 样式名称:type style_name: str:param update_style_flags:如果为 True,则样式标志将按子系列名称进行更新:类型 update_style_flags:bool:引发 ValueError:如果计算的 PostScript 名称长度超过 63 个字符。"""font.rename(family_name="My Font New", style_name ="粗体斜体",update_style_flags=True)
sanitize
"""使用 OpenType Sanitizer 清理字体文件。https://github.com/googlefonts/ots-python:param strict:如果为 True(默认),则即使在出现清理程序警告时也会引发异常。如果为 False,则仅在以下情况下引发异常: sanitizer 失败(非零退出代码)。:type strict: bool:raises 异常:如果 OpenType Sanitizer 在清理过程中报告错误。:return: None:note: 使用 OpenType Sanitizer (ots) 将字体保存到临时目录并在保存的文件上调用 Sanitizer。如果“strict”为 True(默认),则仅将 Sanitizer 警告视为错误。检查消毒剂错误。"""font.sanitize(strict=True)
save
"""将字体保存在文件路径。:param filepath: 文件路径,如果 None 则将使用源文件路径:type filepath: str 或 None:param overwrite: 覆盖,如果 True 则可以覆盖源字体文件:type overwrite : bool:returns: 保存字体的文件路径。:rtype: str:raises ValueError: 如果文件路径与源字体相同且不覆盖允许。"""saved_font_path = font.save(filepath=None, overwrite=False)
save_as_woff
"""将字体另存为 woff.:param filepath: filepath:type filepath: str:param overwrite: 覆盖,如果 True 则源字体文件可以被覆盖:type overwrite: bool:returns: 字体所在的文件路径保存到.:rtype: str"""saved_font_path = font.save_as_woff(filepath=None, overwrite=True)
save_as_woff2
"""将字体另存为 woff2.:param filepath: filepath:type filepath: str:param overwrite: 覆盖,如果 True 则源字体文件可以被覆盖:type overwrite: bool:returns: 字体所在的文件路径保存到.:rtype: str"""saved_font_path = font.save_as_woff2(filepath=None, overwrite=True)
save_to_fileobject
"""将字体写入类文件对象。如果没有传递文件对象,则会为用户创建一个 `BytesIO` 实例。:param fileobject: 要写入的类文件对象。:returns: 文件最初传递的对象,或新的 BytesIOinstance.:rtype: Typing.io.IO"""fileobject = font.save_to_fileobject(fileobject=None)
save_variable_instances
"""以一种或多种格式将可变字体的所有实例保存到指定目录。:param dirpath: dirpath:type dirpath: 保存实例的目录路径。:param woff2: 是否保存实例也是 WOFF2 格式。默认为 True。:type woff2: bool:param woff: 是否也以 WOFF 格式保存实例。默认为 True。:type woff: bool:param overwrite: 是否覆盖现有文件。目录。默认为 True。:type overwrite: bool:param options: 生成静态实例时传递给实例器的附加选项。:type options:dictionary:returns: 包含每个已保存实例的字典的列表。 ' (包含实例元数据)和 'files' (以文件格式作为键、文件路径作为值的字典)。:引发 TypeError: 如果字体不是可变字体。"""saved_fonts = font.save_variable_instances(dirpath, woff2=True, woff=True, overwrite=True, **选项)
set_family_classification
"""根据提供的 class_id 和 subclass_id 设置字体系列分类(OS/2 表中的 sFamilyClass)。:param class_id: 字体系列类的数字标识符。:param subclass_id: 字体系列子类的可选数字标识符(默认为0).:引发操作错误: 如果 OS/2 表在字体中不可用。:引发参数错误: 如果 class_id 无效或指定了 subclass_id 但无效。"""font.set_family_classification(**font.FAMILY_CLASSIFICATION_SCRIPTS_CALLIGRAPHIC)# 或者:font.set_family_classification(class_id=10, subclass_id=5)
set_family_name
"""设置更新相关字体名称记录的系列名称。:param name: 名称:类型名称: 新的系列名称。"""font.set_family_name(name="My Font New")
set_name
"""通过字体名称表中的标识符设置名称。:param key: 名称 id 或键(例如“family_name”):type key: int 或 str:param value: 值:type value: str" ""font.set_name(Font.NAME_FAMILY_NAME, "家族名称已重命名")
set_names
"""通过名称表中的标识符设置名称。:param名称:名称:类型名称:字典"""font.set_names(names={Font.NAME_FAMILY_NAME: "家族名称已重命名",Font.NAME_SUBFAMILY_NAME: "常规重命名”, })
set_style_flag
"""设置样式标志。:param key: 标志 key:type key: str:param value: value:type value: bool"""font.set_style_flag(Font.STYLE_FLAG_BOLD, True)
set_style_flags
"""设置样式标志,设置为 None 的标志将被忽略。:param 粗体: 粗体标志值。:type 粗体: bool 或 None:param italic: 斜体标志值。:type italic: bool 或 None:param underline: 下划线标志值。:type underline: bool 或 None:param border: 轮廓标志值。:type outline: bool 或 None"""font.set_style_flags(regular=None,粗体=无,斜体=无,轮廓=无,下划线=无)
set_style_flags_by_subfamily_name
"""按亚科名称值设置样式标志。亚科值应为“常规”、“斜体”、“粗体”或“粗体斜体”,以允许此方法正常工作。"""font.set_style_flags_by_subfamily_name()
set_style_name
"""设置更新相关字体名称记录的样式名称。:param name: 名称:type name: 新样式名称。"""font.set_style_name(name="Bold Italic")
set_vertical_metrics
"""设置垂直度量。:parammetrics: 表示可以设置的垂直度量的关键字参数:"units_per_em", "y_max", "y_min", "ascent", "descent", "line_gap", "typo_ascender" 、“typo_descender”、“typo_line_gap”、“cap_height”、“x_height”、“win_ascent”、 “win_descent”“”“font.set_vertical_metrics(units_per_em = 2000,y_max = 2102,y_min = -533,上升= 1800,下降= -400,line_gap = 0,typo_ascender = 1800,typo_descender = -400,typo_line_gap = 0,cap_height =1400, x_height=1080、win_ascent=2160、win_descent=540)
subset
“”“使用给定选项(unicodes或字形或文本)对字体进行子集化,也可以传递子集器选项,更多信息如下:https://github.com/fonttools/fonttools/blob/main/Lib/fontTools /subset/__init__.py:param unicodes: unicodes:type unicodes: str 或 list:param glyphs: glyphs:type glyphs: list:param text: 文本:类型 文本: str:param 选项: 子集选项:类型 选项: dict"""font.subset(unicodes="", glyphs=[], text="", **options)
to_sliced_variable
"""将可变字体转换为在给定坐标处切片可变轴的部分字体。如果未指定轴值,则该轴将保持不变。如果轴的最小值和最大值相等,则该轴将被固定.:param坐标:坐标字典,每个项目值必须是元组/列表/字典(带有'min','default'和'max'键)用于切片或float/int用于固定,例如。 {'wdth':100, 'wght':(100,600), 'ital':(30,65,70)} 或 {'wdth':100, 'wght':[100,600], 'ital':[30, 65,70]} 或 {'wdth':100, 'wght':{'min':100,'max':600}, 'ital':{'min':30,'default':65,'max':70}}:类型坐标: dict:param options :fontTools.varLib.instancer的选项:type选项:dictionary:raises TypeError:如果字体不是变量font:raises ValueError:如果坐标未定义(空):raises ValueError:如果坐标轴都被固定"""font.to_sliced_variable(coordinates, **options)
to_static
"""将可变字体转换为静态字体,将可变轴固定在给定坐标处。如果未指定轴值,则该轴将固定为其默认值。如果未指定坐标,则每个轴将固定为其默认值value.:param 坐标:坐标,例如 {'wght':500, 'ital':50}:type 坐标:dict 或 None:param style_name: 现有实例样式名称,例如 'Black':type style_name: str 或 None:param update_names: 如果 True,名称记录将根据最近的实例更新:类型 update_names: bool:param update_style_flags: 如果 True,样式标志将根据最近的实例更新:类型 update_style_flags: bool:param options :fontTools.varLib.instancer的选项:类型选项:字典:raises TypeError:如果字体不是变量font:raises ValueError:如果坐标轴不是全部固定“”“font.to_static(坐标=无,style_name=无,update_names=True,update_style_flags=True,**选项)
# 克隆存储库git clone https://github.com/fabiocaccamo/python-fontbro.git && cd python-fontbro# 创建 virtualenv 并激活它python -m venv venv && . venv/bin/activate# 升级 pippython -m pip install --upgrade pip# 安装requirementspython -m pip install -rrequirements.txt -rrequirements-test.txt# 安装预提交以运行格式化程序和 lterspre-commit install -- install-hooks#使用toxtox运行测试#或使用unittest运行测试python -m unittest
根据 MIT 许可发布。
特别感谢 Jérémie Hornus 和 Just Van Rossum。
在 GitHub 上为该项目加注星标
在 GitHub 上关注我
?在 Twitter 上关注我
?在 Github 上赞助我
python-benedict
- 具有 keylist/keypath 支持、I/O 快捷方式(base64、csv、json、pickle、plist、query-string、toml、xml、yaml)和许多实用程序的 dict 子类。
python-fsutil
- 懒惰开发人员的文件系统实用程序。 ?♂️