从glyphs源文件(.glyphs)到ufo的桥梁

glyphsLib的Python项目详细描述


Travis Build StatusPyPI VersionCodecovJoin the chat at https://gitter.im/fonttools-dev/glyphsLib

glyphslib

此库提供了从glyphs源文件(.glyphs)到 UFO和设计空间文件通过defcondesignspaceLib

转换的主要方法见__init__.py。 如果 需要。

写入并返回ufo

以下代码将把UFO和设计空间文件写入磁盘。

importglyphsLibmaster_dir="master_ufos"ufos,designspace_path=glyphsLib.build_masters("MyFont.glyphs",master_dir)

如果要插入实例,请改用fontmake。它在处理字形文件时使用这个库。

加载ufo对象而不写入

importglyphsLibufos=glyphsLib.load_to_ufos("MyFont.glyphs")

将字形数据读写为python对象

fromglyphsLibimportGSFontfont=GSFont(glyphs_file)font.save(glyphs_file)

glyphsLib.classes模块旨在提供类似于 glyphs.app的Python Scripting API

注意,目前并不是所有的类和方法都可以 实施。我们试着跟上时代,但如果你发现 丢失或无法按预期工作,请打开一个问题。

在飞碟和象形文字之间来回移动

  1. 可以使用ufo2glyphsglyphs2ufo命令行脚本 往返你的源文件。默认情况下,脚本尝试保留为 尽可能多的元数据。

    # Generate master UFOs and Designspace file
    glyphs2ufo Example.glyphs
    
    # Go back
    ufo2glyphs Example.designspace
    
    # You can also combine single UFOs into a Glyphs source file.
    ufo2glyphs Example-Regular.ufo Example-Bold.ufo
    
  2. 不使用设计空间文件,例如使用 Inria fonts by Black[Foundry]

    importglobfromdefconimportFontfromglyphsLibimportto_glyphsufos=[Font(path)forpathinglob.glob("*Italic.ufo")]# Sort the UFOs because glyphsLib will create masters in the same orderufos=sorted(ufos,key=lambdaufo:ufo.info.openTypeOS2WeightClass)font=to_glyphs(ufos)font.save("InriaSansItalic.glyphs")

    Here is the resulting glyphs file

  3. 使用设计空间,使用 Spectral from Production Type

    importglobfromfontTools.designspaceLibimportDesignSpaceDocumentfromglyphsLibimportto_glyphsdoc=DesignSpaceDocument()doc.read("spectral-build-roman.designspace")font=to_glyphs(doc)font.save("SpectralRoman.glyphs")

    Here is the resulting glyphs file

  4. 在这两种编程情况下,如果您打算在修改后返回到UFO 对于带有标志符号的文件,应该使用minimize_ufo_diffs参数 最小化后面和后面的git中显示的差异量 向前。为此,glyphslib将在 userData个字段。例如,它将尝试记住哪个gsclass来了 从groups.plist或特征文件。

对于想要做字形的人来说,存在同样的选项-gt;不明飞行物-&字形: minimize_glyphs_diffs,它将在ufolib中添加一些记帐数据。 例如,它将为字形层保留相同的uuid,因此需要 在不明飞行物中储存这些层次的uuid。

importglobimportosfromfontTools.designspaceLibimportDesignSpaceDocumentfromglyphsLibimportto_glyphs,to_designspace,GSFontdoc=DesignSpaceDocument()doc.read("spectral-build-roman.designspace")font=to_glyphs(doc,minimize_ufo_diffs=True)doc2=to_designspace(font,propagate_anchors=False)# UFOs are in memory only, attached to the doc via `sources`# Writing doc2 over the original doc should generate very few git diffs (ideally none)doc2.write(doc.path)forsourceindoc2.sources:path=os.path.join(os.path.dirname(doc.path),source.filename)# You will want to use ufoNormalizer aftersource.font.save(path)font=GSFont("SpectralRoman.glyphs")doc=to_designspace(font,minimize_glyphs_diffs=True,propagate_anchors=False)font2=to_glyphs(doc)# Writing font2 over font should generate very few git diffs (ideally none):font2.save(font.filepath)

在实践中,总是有一些不同的东西,并不能真正使 不同之处,例如添加/删除可选内容或更改空白或 正在重新排序的内容…

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于批量操作的java RESTful API分块响应   java读取在线存储的文本文件   在Java ME中将双精度舍入到小数点后5位   java查找一个数字的最接近因子   java更改JMenuBar的字体   java Kmeans聚类算法运行时间和复杂性   java是否可以阻止try catch返回null   java内容解析器指向具有正确URI的错误表   java Android Kotlin插装测试未被识别为插装测试   java TestNG@Dataprovider   在forloop和print语句中声明变量时发生java错误   java在Android Studio 3中设置JNI