当前位置:网站首页>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 .
边栏推荐
猜你喜欢
NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
C web page open WinForm exe
Basic operations of database and table ----- set the fields of the table to be automatically added
1. Introduction to basic functions of power query
Basic operations of databases and tables ----- unique constraints
晶振是如何起振的?
3D model format summary
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
Initialize MySQL database when docker container starts
一圖看懂!為什麼學校教了你Coding但還是不會的原因...
随机推荐
Dynamics 365 开发协作最佳实践思考
Alibaba-Canal使用详解(排坑版)_MySQL与ES数据同步
插卡4G工业路由器充电桩智能柜专网视频监控4G转以太网转WiFi有线网速测试 软硬件定制
[Jiudu OJ 09] two points to find student information
NiO related knowledge (II)
电气数据|IEEE118(含风能太阳能)
LeetCode 322. Change exchange (dynamic planning)
[flask] obtain request information, redirect and error handling
D22:indeterminate equation (indefinite equation, translation + problem solution)
CocoaPods could not find compatible versions for pod 'Firebase/CoreOnly'
【Flask】响应、session与Message Flashing
Huawei converged VLAN principle and configuration
【详细】快速实现对象映射的几种方式
【全網最全】 |MySQL EXPLAIN 完全解讀
Basic operations of database and table ----- delete data table
Threedposetracker project resolution
Ordinary people end up in Global trade, and a new round of structural opportunities emerge
leetcode刷题_验证回文字符串 Ⅱ
You are using pip version 21.1.1; however, version 22.0.3 is available. You should consider upgradin
leetcode刷题_反转字符串中的元音字母