TrueType字体文件提取关键信息
该文章以提取head模块属性中的修订版本fontRevision为例。
TrueType字体文件相关属性参考文章:TrueType
字体解释器opentype.js源码下载地址:opentype.js源码
图一:TrueType | 图二:OpenType |
TrueType字体一般包含在单个TrueType字体文件里,后缀为.TTF。
OpenType字体是一种类似于TrueType字体的文件,其格式编码为POSTSCRIPT字体,后缀为.OTF。
1、需求分析
我们要提取众多参数中的固定参数:修订版本,并且明确修订版本是在head属性中,此时要看Font Inspector如何把各个属性模块进行拆分,并且找到我们的head属性,进而在head属性模块中提取到修订版本fontRevision参数。
首先我们创建了各种属性字段的类,每一个类中包含众多参数,像head、name等就是一个个类对象,而像version、fontRevision等就是类中的变量属性。
2、读取文件
读取文件,将二进制文件进行读取,加载到数组中,并作为参数传递到后续的接口里。
读取文件的前x位,根据不同文件类型的特征,读取作为文件类型的标识位,来获取当前文件类型。
不同文件类型也许有不同的属性模块和字段列表,我们以ttf文件为例,他就包含了如下的类属性字段,然后这些不同的类属性下还有各种变量。
3、查看head相关属性
我们以head为例,在该类下有许多的变量参数,这些参数有默认的数据类型和默认值。
4、查看Font Inspector如何把各个属性模块进行拆分
我们的TrueType是一种字体文件,该字体文件有一个特性,它字体表中所有属性模块都是4个字符,如图所示:对于我们要找的head,我们用红色实线标记出来。
现在我们应该怎么把各个属性字段拆分呢?又怎么把head字段属性从这些字体表中分离出来呢?通过getTag()接口,该接口是从DataView视图中检索4个字符的标记。也就是将字段属性对应的4字符进行返回。
至此我们已经找到了head属性字段,head属性字段在整个二进制文件起始偏移量300的位置,长度为54,我们得到了有效信息。接下来要做的就是从head中提取fontRevision属性,此时直接从其实偏移量300的位置开始读取,每次读取固定字节数,找到要读取的目标。
我们在head的中构建了相关的视图结构,该视图中包含了多个属性参数,我们要提取的参数也用红视线标记了出来。
我们在headTable结构中提取fontRevision参数,我们把数据data和head相对二进制文件的起始偏移量start作为参数传递到接口中,然后new Parser对象,把数据传递进去,以对象的形式保存。
其实就相当于创建了一个试图,该视图中有数据data,起始偏移量offset,当前偏移量relativeOffset。HeadTable结构如下图:
我们接下来就是利用当前偏移量一个个读取,除了head中的参数字段,还规定了该参数字段的类型,决定了他在当前字段的偏移量,我们就利用parseFixed()接口,根据每个参数字段的类型,不断把当前偏移量relativeOffset不断进行递增,直到读取到fontRevision参数,然后利用Math库中的round函数四舍五入,进行数据截断。
TrueType字体文件提取关键信息相关推荐
- 使用PYTHON将上百个TXT文件提取其中信息生成一个csv
原文件目录如图 只把他们合并成一个txt没到到自己的需要,我需要做成一个如图所示的csv文件,以上传服务器生成文章 上代码: #coded by伊玛目的门徒 多个txt提取关键信息生成csv #cod ...
- Python爬取百度百科,BeautifulSoup提取关键信息
本文主要爬取演员杨幂的百度百科,用到的python库有:requests和BeautifulSoup 主要内容共分为以下两个方面: 1. 用requests爬取网页内容 2. 用BeautifulSo ...
- LLVM IR:从中间文件提取struct信息
LLVM IR:从中间文件提取struct信息 先放上源代码: struct demo1 {long long A;long long B;}; struct demo2 {long long C;l ...
- python文字提取关键信息_Python提取图片中的文字信息,腾讯内部技术,一行代码搞定!...
用过手机QQ就知道,点击一个图片会弹出一个小功能,那就是提取图片中的文字.非常方便实用,那么很难实现吗? 利用Python提取图片中的文字信息,只需要一行代码就能搞定! 当然,这是吹牛皮的,但是真正的 ...
- 提取pdf里关键信息到mysql
提取pdf里关键信息到mysql 背景 问题分析 操作实施 pdf转图片 调用ocr接口图片转txt 正则提取txt并写入mysql 效果预览 总结 背景 本次公司来了一批有关上海物业招标信息文件,原 ...
- 关于TrueType字体结构的文章
转载链接: http://www.zhaozi.cn/e/DoPrint/?classid=94&id=45 TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为. ...
- [转]TrueType字体结构
TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为.TTF. OpenType字体是以类似于TrueType字体的格式编码的POSTSCRIPT字体.OPENTYPE字体使用. ...
- 关于TrueType字体
关于TrueType字体结构的文章 分类: C/C++ TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为.TTF.OpenType字体是以类似 于TrueType字体的 ...
- truetype字体怎么转换成普通字体_【转】TrueType(二)字体格式解析
1. 概述 TrueType字体使用Mac轮廓字体资源的格式编码,标记名为"sfnt". 字体目录TableDirectory包含了字体格式的版本号和几个表. typedef st ...
最新文章
- 【重磅干货】Python、机器学习、深度学习算法实战和应用必备书籍
- 接到三无产品的测试需求时怎么办
- window对象方法之setTimeout(),setInterval()
- python定义一个类描述数字时钟_python自定义时钟类、定时任务类
- 业余长跑爱好者最后膝盖都怎样了?
- springboot租房管理系统答辩PPT模板
- idea开发vue项目时,使用@引入组件警告:Module is not installed
- 二、optimizer_trace基本使用
- 方法、脚本-Pig Grunt之简单命令及实例说明-by小雨
- 计算机通信职称评定,2017年通信工程师中级职称评定条件说明
- 如何在linux上下载各种常用安卓应用
- sumif 根据条件求和
- Scrapy 调用讯代理动态转发BUG 解决
- Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
- python基础读后感_《Python基础教程读书笔记》
- 怎么做照片拼图?这些方法值得收藏
- BZOJ4810 [Ynoi2017]由乃的玉米田
- Linux系统管理学习计划
- Java控制语句详解
- 您的计算机无法访问dota2,如何解决Win10系统无法登录dota2的问题?