otsanitizer的Python包装器

pyots的Python项目详细描述


pyots(PYthon OT消毒剂)

OpenType Sanitizer的Python包装器,也称为“OTS”。它类似于并部分基于ots-python,但将OTS构建为Python C扩展(而不是像OTS Python那样作为可执行文件并通过subprocess调用)。在

注意:虽然这个包与ots python很相似,但它是not的替换品,因为python API不同。在

要求

该项目为Mac或Linux下的Python3.6、3.7或3.8构建pip可安装的轮子。这个项目有可能与其他python和其他操作系统一起构建和运行,但是它只在列出的配置下进行了测试。在

使用pip安装

如果您只想usepyots,只需运行pip install pyots(在受支持的平台/Python版本之一中),它将安装预构建、编译、随时可用的Python轮子。然后可以跳到Use部分。在

开发pyots的安装/设置

如果您想修改pyots代码,您需要准备好本地设置:

  • 克隆此回购
  • 运行python setup.py download下载OTS源代码(此项目中不包含)。您可以修改^{^{}中的version值,以指定不同版本的OTS。您还需要更改与OTS对应的sha256哈希值焦油.xz包裹。请注意,此方案有一些限制:早于7.1.7的OTS源可能无法正确生成,因为它使用了不同的生成系统。此外,比此回购协议中指定的版本更新的版本可能需要调整才能正确构建。在
  • 要在下载OTS后生成并安装pyots,可以运行python setup.py install或{}

测试

这里定义了一个测试套件来测试Python扩展。它在src/ots中使用(并假设存在)下载的OTS库源代码的测试字体数据,因此请确保您已运行python setup.py download,并且在src下有{}文件夹。使用python -m pytest testspytest tests调用测试(确保指定tests文件夹,否则{}将发现并尝试在ots树中执行其他Python测试,这可能会失败)

使用

最简单的情况:

importpyotsresult=pyots.sanitize('/path/to/font/file.ttf')

result是一个OTSResult^{}/轻量级对象),具有3个属性:

  • sanitized指示文件是否已成功清理的布尔值
  • modified布尔值,指示文件是否在清理过程中被修改*
  • messages清理期间生成的消息字符串元组(可能为空)
  • 注意:当前后端OTS代码总是修改已成功清理的字体。因此,modified对于sanitized为真的所有情况都是真的。通常修改只是对修改日期和相关校验和进行修改。因此,可以设计出更好的修改检测,即忽略head.modified和其他无关紧要的修改,但这超出了本工作的范围。在

示例:清理字体文件文件夹

^{pr2}$

sanitize()

的选项
  • 将关键字output=<path_to_output_file>指定到sanitize()命令中,清理后的文件将保存到该位置
  • 使用quiet=Truefor sanitize()来抑制消息
  • 在清理集合(OTC/TTC)文件时指定font_index=<index_in_TTC>,并且您只希望清理集合中的特定索引(否则,将根据OTS的默认行为对所有索引进行清理)

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

推荐PyPI第三方库


热门话题
java如何在片段中使用listView?   java Android Studio:在不同的活动中使用“OnClick”方法?   设置IntelliJ时,java字符未正确显示   如何使用Java解析每个不同键和值的JSON对象?   简单的java AI响应程序?   java更改进程中不确定对话框的颜色   java类型不匹配:无法在eclipse中从双精度转换为整数   java如何理解我的类的属性是否已更改   xml Java Jena API获取另一个类的属性   java在JPanel上缩放和加载地图分幅   java在安卓 studio上使用工具栏的正确方法是什么?   java使用基于iText Core的OpenPdf从pdf页面删除或更新添加的图像图标   JavaFacebookGraphAPI在第一次请求时返回400,在第二次请求时返回200,这两个请求是相同的   java如何在DynamoDB中实现选择和插入项作为一个事务   java如何使用MAVEN运行方法?   (如何)在Java三元运算符语句中捕获异常?   java如何使用Hibernate SchemaExport和BeanValidation约束导出数据库模式?   java如何在weblogic中使用hibernate代替eclipselink?   Java读socketTcp更快