在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": " Sans Serif / Neo-grotesque Gothic", "class_id": 8, "class_name": "Sans Serif", "subclass_id": 5, "subclass_name": "Neo-grotesque Gothic", }:rtype: dict""" family_classificationation = 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: 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]':類型variable_axes_tags:bool:paramvariable_axes_values:變數軸值標誌如果為True,將附加每個軸值,例如'[wght(100,100,900),wdth(75,100,125)]' 3: : 檔名。
get_fingerprint
"""取得字體指紋:根據字體的影像表示計算的雜湊值。變更文字選項會影響傳回的指紋。:param text: 用於產生指紋的文本,預設值:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789」。 str:returns: 指紋雜湊值。
get_fingerprint_match
"""取得此字體與另一種字體之間的指紋匹配。透過檢查它們的指紋是否相等(差異<= 容差)。:param other: 另一種字體,可以是檔案路徑或Font 實例。: type other: str 或Font:param 容差:差異容差,預設3.:type 容差: int:param text: 用於產生指紋的文本,預設值: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwz0123456789".包含符合資訊(match、diff、hash、other_hash)。
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: 用於渲染的字體大小文本,以點為單位。
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 區塊清單。
get_unicode_script_by_name
"""透過名稱/標籤取得unicode腳本(名稱/標籤不區分大小寫,忽略「-」)。:param name: name:type name: str:returns: 如果名稱/標籤是unicode腳本字典有效,否則無。
get_unicode_scripts
"""取得 unicode 腳本及其覆蓋率。僅傳回覆蓋率 >=coverage_threshold (0.0 <=coverage_threshold <= 1.0) 的腳本。:paramcoverage_threshold: 要傳回的腳本所需的最小覆蓋率。:typecoverage_threshold: float:returns : unicode 腳本清單。
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}如果座標未指定某些軸,則使用軸預設值進行查找。 ,「寬度」: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 未定義,則會自動偵測自動偵測。 : 如果計算的PostScript-name 長度超過63 個字元。
sanitize
"""使用OpenType Sanitizer 清理字體檔案。https://github.com/googlefonts/ots-python:param strict:如果為True(預設),則即使在出現清理程序警告時也會引發異常。如果為False ,則僅在下列情況下引發例外狀況: sanitizer 失敗(非零退出程式碼)。 ) 清理字型檔。清理程序錯誤。
save
"""將字型儲存在檔案路徑。:param filepath: 檔案路徑,如果 None 則將使用來源檔案路徑:type filepath: str 或 None:param overwrite: 覆寫,如果 True 則可以覆寫來源字型檔案:type overwrite : bool:returns: 儲存字型的檔案路徑。
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 格式。預設為真。 param options: 產生靜態實例時要傳遞給實例器的附加選項。 )和「檔案」(以檔案格式為鍵、檔案路徑為值的字典)。覆蓋=True、**選項)
set_family_classification
"""根據提供的class_id 和subclass_id 設定字型系列分類(OS/2 表中的sFamilyClass)。:param class_id: 字型系列類別的數字識別碼。:param subclass_id: 字型系列子類別的可選數字識別碼(預設為0).:引發操作錯誤:如果OS/2 表在字體中不可用。或: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: 底線標誌值。無,底線=無)
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”,”,“typo_line_gap”,“cap_height”,“x_height”,“win_ascent”,“win_descent”“”“font.set_vertical_metrics(units_per_em = 2000,y_max = 2102,y_min = -53338,0000000 、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: text:type text: str:param options:param optionstype選項: dict"""font.subset(unicodes="", glyphs=[], text="", **選項)
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選項:fontTools.varLib.instancer的選項:型別選項:字典:raises TypeError:如果字型不是變數font:raises ValueError:如果座標未定義(空):raises ValueError:如果座標軸全部固定「」「font.to_sliced_variable(座標,**選項)
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(coordinates_None, style style style style stylep =無,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
- 懶惰開發人員的檔案系統實用程式。 ?♂️