当前位置:网站首页>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
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 .
边栏推荐
- ctf. Show PHP feature (89~110)
- Redis-列表
- Comments on flowable source code (XXXV) timer activation process definition processor, process instance migration job processor
- Poj2315 football games
- NumPy 数组索引 切片
- 500 lines of code to understand the principle of mecached cache client driver
- [understanding of opportunity-39]: Guiguzi - Chapter 5 flying clamp - warning 2: there are six types of praise. Be careful to enjoy praise as fish enjoy bait.
- A glimpse of spir-v
- [flask] response, session and message flashing
- 竞赛题 2022-6-26
猜你喜欢
【SSRF-01】服务器端请求伪造漏洞原理及利用实例
MATLB|实时机会约束决策及其在电力系统中的应用
Open source | Ctrip ticket BDD UI testing framework flybirds
1. Introduction to basic functions of power query
Unity | two ways to realize facial drive
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
Poj2315 football games
Docker compose配置MySQL并实现远程连接
How to see the K-line chart of gold price trend?
Force buckle 9 palindromes
随机推荐
[flask] official tutorial -part2: Blueprint - view, template, static file
Basic operations of database and table ----- delete data table
Redis-列表
晶振是如何起振的?
剑指 Offer 38. 字符串的排列
Netease smart enterprises enter the market against the trend, and there is a new possibility for game industrialization
2022年PMP项目管理考试敏捷知识点(8)
False breakthroughs in the trend of London Silver
Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
[understanding of opportunity-39]: Guiguzi - Chapter 5 flying clamp - warning 2: there are six types of praise. Be careful to enjoy praise as fish enjoy bait.
Force buckle 1020 Number of enclaves
MUX VLAN configuration
Leetcode sum of two numbers
[detailed] several ways to quickly realize object mapping
Leetcode skimming questions_ Invert vowels in a string
Folio.ink 免费、快速、易用的图片分享工具
Basic operations of databases and tables ----- primary key constraints
How to get the PHP version- How to get the PHP Version?
【全网最全】 |MySQL EXPLAIN 完全解读
Open source | Ctrip ticket BDD UI testing framework flybirds