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赞助。任何使用第三方商标或徽标都遵守这些第三方政策。