当前位置:网站首页>Extracting key information from TrueType font files
Extracting key information from TrueType font files
2022-07-06 01:39:00 【Be a happy programmer】
This article extracts head Revision in module properties fontRevision For example .
TrueType Font file related attributes reference article :TrueType
Font interpreter opentype.js Source code download address :opentype.js Source code
Figure 1 :TrueType | Figure 2 :OpenType |
TrueType Fonts are generally contained in a single TrueType In the font file , The suffix is .TTF.
OpenType Font is a kind of similar to TrueType Font file , Its format code is POSTSCRIPT typeface , The suffix is .OTF.
1、 Demand analysis
We need to extract fixed parameters among many parameters : Revision , And it is clear that the revised version is in head Properties of the , At this point, it depends on Font Inspector How to split each attribute module , And find our head attribute , And then in head The revision is extracted from the attribute module fontRevision Parameters .
First, we create classes for various attribute fields , Each class contains many parameters , image head、name And so on are class objects , And like version、fontRevision And so on are variable attributes in the class .
2、 Read the file
Read the file , Read the binary file , Load into the array , And pass it as a parameter to the subsequent interface .
Before reading the file x position , According to the characteristics of different file types , Read the identification bit as the file type , To get the current file type .
Different file types may have different attribute modules and field lists , We use ttf File as an example , It contains the following class attribute fields , Then there are various variables under these different class attributes .
3、 see head Related properties
We use head For example , There are many variable parameters under this class , These parameters have default data types and default values .
4、 see Font Inspector How to split each attribute module
our TrueType Is a font file , The font file has a feature , All attribute modules in its font table are 4 Characters , As shown in the figure : For what we are looking for head, We mark it with a solid red line .
Now how can we split each attribute field ? How to head Field attributes are separated from these font tables ? adopt getTag() Interface , This interface is from DataView Retrieve in view 4 A mark of characters . That is, corresponding to the field attribute 4 Characters to return .


So far we have found head attribute field ,head The starting offset of the attribute field in the whole binary file 300 The location of , The length is 54, We got effective information . The next thing to do is start from head Extract from fontRevision attribute , At this time, offset directly from the actual amount 300 Start reading from the location of , A fixed number of bytes are read each time , Find the target to read .
We are head The related view structure is built in , This view contains multiple attribute parameters , The parameters we want to extract are also marked with red line of sight .
We are headTable Extract from the structure fontRevision Parameters , We put the data data and head The starting offset from the binary file start Pass it to the interface as a parameter , then new Parser object , Pass the data in , Save as an object .

In fact, it is equivalent to creating an attempt , There is data in this view data, Starting offset offset, Current offset relativeOffset.HeadTable The structure is as follows: :
Next, we use the current offset to read one by one , except head Parameter fields in , It also specifies the type of the parameter field , Determines its offset in the current field , We'll use it parseFixed() Interface , According to the type of each parameter field , Keep the current offset relativeOffset Continue to increase , Until I read fontRevision Parameters , And then use it Math In the library round The function is rounded , Perform data truncation .



边栏推荐
- 【全网最全】 |MySQL EXPLAIN 完全解读
- A Cooperative Approach to Particle Swarm Optimization
- SPIR-V初窥
- ClickOnce does not support request execution level 'requireAdministrator'
- Basic operations of databases and tables ----- unique constraints
- 伦敦银走势中的假突破
- Ali test Open face test
- Basic operations of databases and tables ----- default constraints
- [technology development -28]: overview of information and communication network, new technology forms, high-quality development of information and communication industry
- Leetcode skimming questions_ Verify palindrome string II
猜你喜欢
![[flask] official tutorial -part2: Blueprint - view, template, static file](/img/bd/a736d45d7154119e75428f227af202.png)
[flask] official tutorial -part2: Blueprint - view, template, static file
![[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览](/img/94/05b2ff62a8a11340cc94c69645db73.png)
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览

Basic operations of databases and tables ----- default constraints

Win10 add file extension

Docker compose配置MySQL并实现远程连接

C web page open WinForm exe

TrueType字体文件提取关键信息

Tensorflow customize the whole training process

电气数据|IEEE118(含风能太阳能)

【已解决】如何生成漂亮的静态文档说明页
随机推荐
伦敦银走势中的假突破
Leetcode skimming questions_ Invert vowels in a string
leetcode刷题_反转字符串中的元音字母
Ali test Open face test
竞价推广流程
Superfluid_ HQ hacked analysis
yii中console方法调用,yii console定时任务
[flask] official tutorial -part1: project layout, application settings, definition and database access
MUX VLAN configuration
NiO related knowledge (II)
Leetcode 208. Implement trie (prefix tree)
【已解决】如何生成漂亮的静态文档说明页
MySQL learning notes 2
【网络攻防实训习题】
竞赛题 2022-6-26
Leetcode 剑指 Offer 59 - II. 队列的最大值
Basic operations of databases and tables ----- unique constraints
[Jiudu OJ 09] two points to find student information
Luo Gu P1170 Bugs Bunny and Hunter
Paddle框架:PaddleNLP概述【飞桨自然语言处理开发库】
Figure 1 :TrueType
Figure 2 :OpenType