从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第三方库


热门话题
IntelliJ IDEA Java代码样式:注释和枚举之间的空间   java车辆路径问题或工具教程未在eclipse上运行   从HTML表单发布时,java非英语UTF 8字符会发生变化   使用MultiResourceItemReader时,java Spring批处理在CustomLineMapper中获取文件名   java配置JAXB解组器来处理同时具有acessor方法和字段的类   java在JpaRepository findAll()方法中返回对象的浅拷贝   java如何对docx文件进行碎片整理,以便与ApachePOI3.8一起使用?   java如何将一维数组分解成行?   java为什么这个图形对象不是绘画?(我做错了什么?)   如何在Java代码中将Java函数应用于Scala选项   使用IntelliJ REST客户端测试Spring MVC POST导致415   weka java代码kmeans群集   java中为什么Sin(30)=0.98803116240928618   java创建Android警报通知   数组可能是Java For循环问题