Dwriteshapepy是使用Cython構建的Python擴展。它為DirectWrite成型引擎提供了簡化的綁定。該模型類似於Uharfbuzz提供的模型,但是由於DirectWrite和Harfbuzz之間的API模型差異,因此存在一些差異。
Dwriteshapepy最初是為了支持基於Python的字體測試環境而開發的,在該環境中,使用DirectWrite和Harfbuzz執行了類似的測試。
該存儲庫包含兩種構建擴展名的方法。使用Setup.py和Visual Studio解決方案的標準Python/Cython方法。 setup.py用於構建,安裝和創建分發軟件包。 Visual Studio解決方案用於擴展和客戶端的交叉模式調試。
Setup.py用擴展名稱“ Dwriteshapepy”構建包裝。使用setup.py來構建,安裝和創建分佈套件時有用的命令行是:
在本地機器上構建擴展名。 python setup.py build
將內置的擴展安裝到當前的Python環境中。 python設置
創建分銷包。 python setup.py bdist_wheel
存儲庫中的Dwriteshape目錄包含Visual Studio解決方案和項目。 Dwriteshape解決方案包含兩個項目。 Dwriteshape項目和客戶端項目。 Dwriteshape項目將軟件包構建為擴展名稱“ dwriteshape”。注意使用setup.py擴展構建之間的區別。這是必要的,因為Visual Studio的控制水平與setup.py的控制水平沒有相同,並且似乎需要擴展名稱與.pyx文件的控制室相同。它也可以避免名稱碰撞。 Visual Studio項目僅應用於創建開發擴展的調試構建。客戶端項目是Dwriteshape項目的簡單測試客戶端。
為了使用Visual Studio項目構建擴展名,您必須首先使用Cython從.pyx和.pxd文件創建.cpp文件。 SRC dwriteshapepy目錄中有一個build.bat可以做到這一點。如果使用Visual Studio或setup.py構建,則應刪除生成的文件dwriteshape.cpp,反之亦然。使用setup.py構建時,.cpp文件是自動生成的,因此build.bat是不需要的。
目錄SRC CPP包含擴展的DWrite抽象層,基本上是導出的API和DWRITE之間的管道。此代碼在構建方法之間很常見。
import sys
import dwriteshapepy as dw
from pathlib import Path
with open ( sys . argv [ 1 ], 'rb' ) as fontfile :
fontdata = fontfile . read ()
text = sys . argv [ 2 ]
face = dw . Face ( fontdata )
font = dw . Font ( face )
upm = font . upem
print ( upm )
buf = dw . Buffer ()
buf . add_str ( text )
features = { "kern" : True , "liga" : True }
dw . shape ( font , buf , features )
glyph_names = [ font . glyph_to_string ( g . codepoint ) for g in buf . glyph_infos ]
infos = [( g . codepoint , g . cluster ) for g in buf . glyph_infos ]
print ( glyph_names )
print ( infos )
advance = [( adv . x_advance , adv . y_advance , adv . x_offset , adv . y_offset ) for adv in buf . glyph_positions ]
print ( advance )
infos = buf . glyph_infos
positions = buf . glyph_positions
for info , pos in zip ( infos , positions ):
gid = info . codepoint
cluster = info . cluster
x_advance = pos . x_advance
x_offset = pos . x_offset
y_offset = pos . y_offset
print ( f"gid { gid } = { cluster } @ { x_advance } , { x_offset } + { y_offset } " )該項目歡迎貢獻和建議。大多數捐款要求您同意撰寫貢獻者許可協議(CLA),宣布您有權並實際上授予我們使用您的貢獻的權利。有關詳細信息,請訪問https://cla.opensource.microsoft.com。
當您提交拉動請求時,CLA機器人將自動確定您是否需要提供CLA並適當裝飾PR(例如狀態檢查,評論)。只需按照機器人提供的說明即可。您只需要使用我們的CLA在所有存儲庫中進行一次。
該項目採用了Microsoft開源的行為代碼。有關更多信息,請參見《行為守則常見問題守則》或與其他問題或評論聯繫[email protected]。
該項目可能包含用於項目,產品或服務的商標或徽標。 Microsoft商標或徽標的授權使用受到了Microsoft的商標和品牌準則的約束。在此項目的修改版本中使用Microsoft商標或徽標不得引起混亂或暗示Microsoft贊助。任何使用第三方商標或徽標都遵守這些第三方政策。