当前位置:网站首页>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 .
 Insert picture description here
   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 .
 Insert picture description here

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 .
 Insert picture description here

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 .
 Insert picture description here
   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 .
 Insert picture description here
 Insert picture description here
 Insert picture description here
   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 .
 Insert picture description here
   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 .
 Insert picture description here
 Insert picture description here
   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: :
 Insert picture description here
   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 .
 Insert picture description here
 Insert picture description here
 Insert picture description here
 Insert picture description here

原网站

版权声明
本文为[Be a happy programmer]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060130440858.html