当前位置:网站首页>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 .
边栏推荐
- A Cooperative Approach to Particle Swarm Optimization
- Basic process and testing idea of interface automation
- 【网络攻防实训习题】
- Electrical data | IEEE118 (including wind and solar energy)
- [flask] official tutorial -part2: Blueprint - view, template, static file
- Docker compose配置MySQL并实现远程连接
- Basic operations of databases and tables ----- non empty constraints
- A glimpse of spir-v
- Luo Gu P1170 Bugs Bunny and Hunter
- 干货!通过软硬件协同设计加速稀疏神经网络
猜你喜欢
[detailed] several ways to quickly realize object mapping
Initialize MySQL database when docker container starts
How does the crystal oscillator vibrate?
Condition and AQS principle
Huawei Hrbrid interface and VLAN division based on IP
Docker compose配置MySQL并实现远程连接
False breakthroughs in the trend of London Silver
selenium 等待方式
Force buckle 9 palindromes
Redis-列表
随机推荐
剑指 Offer 12. 矩阵中的路径
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
[flask] official tutorial -part3: blog blueprint, project installability
【全网最全】 |MySQL EXPLAIN 完全解读
01.Go语言介绍
1. Introduction to basic functions of power query
NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
National intangible cultural heritage inheritor HD Wang's shadow digital collection of "Four Beauties" made an amazing debut!
Basic operations of database and table ----- delete data table
About error 2003 (HY000): can't connect to MySQL server on 'localhost' (10061)
SPIR-V初窺
Leetcode1961. Check whether the string is an array prefix
Flutter Doctor:Xcode 安装不完整
Mathematical modeling learning from scratch (2): Tools
[机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
Win10 add file extension
Threedposetracker project resolution
【全網最全】 |MySQL EXPLAIN 完全解讀
Poj2315 football games
yii中console方法调用,yii console定时任务