用于控制TrueType字体的字形大小的变量

时间:2019-01-22 12:30:26

标签: fonts true-type-fonts ttx-fonttools

我从ttx fonttools获得了以下数据,这些数据描述了我手动构建的字体二进制文件:

<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="true" ttLibVersion="3.36">

  <GlyphOrder>
    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
    <GlyphID id="0" name=".notdef"/>
    <GlyphID id="1" name="b"/>
    <GlyphID id="2" name="d"/>
  </GlyphOrder>

  <head>
    <!-- Most of this table will be recalculated by the compiler -->
    <tableVersion value="1.0"/>
    <fontRevision value="1.0681"/>
    <checkSumAdjustment value="0x0"/>
    <magicNumber value="0x5f0f3cf5"/>
    <flags value="00000000 00000011"/>
    <unitsPerEm value="1000"/>
    <created value="Tue Jan 22 12:25:10 2019"/>
    <modified value="Tue Jan 22 12:25:10 2019"/>
    <xMin value="10"/>
    <yMin value="10"/>
    <xMax value="90"/>
    <yMax value="90"/>
    <macStyle value="00000000 00000000"/>
    <lowestRecPPEM value="3"/>
    <fontDirectionHint value="2"/>
    <indexToLocFormat value="1"/>
    <glyphDataFormat value="0"/>
  </head>

  <hhea>
    <tableVersion value="0x00010000"/>
    <ascent value="200"/>
    <descent value="100"/>
    <lineGap value="0"/>
    <advanceWidthMax value="90"/>
    <minLeftSideBearing value="0"/>
    <minRightSideBearing value="0"/>
    <xMaxExtent value="0"/>
    <caretSlopeRise value="1"/>
    <caretSlopeRun value="0"/>
    <caretOffset value="0"/>
    <reserved0 value="0"/>
    <reserved1 value="0"/>
    <reserved2 value="0"/>
    <reserved3 value="0"/>
    <metricDataFormat value="0"/>
    <numberOfHMetrics value="3"/>
  </hhea>

  <maxp>
    <!-- Most of this table will be recalculated by the compiler -->
    <tableVersion value="0x10000"/>
    <numGlyphs value="3"/>
    <maxPoints value="5"/>
    <maxContours value="1"/>
    <maxCompositePoints value="0"/>
    <maxCompositeContours value="0"/>
    <maxZones value="1"/>
    <maxTwilightPoints value="0"/>
    <maxStorage value="0"/>
    <maxFunctionDefs value="0"/>
    <maxInstructionDefs value="0"/>
    <maxStackElements value="0"/>
    <maxSizeOfInstructions value="0"/>
    <maxComponentElements value="0"/>
    <maxComponentDepth value="0"/>
  </maxp>

  <OS_2>
    <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
         will be recalculated by the compiler -->
    <version value="5"/>
    <xAvgCharWidth value="90"/>
    <usWeightClass value="500"/>
    <usWidthClass value="5"/>
    <fsType value="00000000 00000000"/>
    <ySubscriptXSize value="650"/>
    <ySubscriptYSize value="699"/>
    <ySubscriptXOffset value="0"/>
    <ySubscriptYOffset value="140"/>
    <ySuperscriptXSize value="650"/>
    <ySuperscriptYSize value="699"/>
    <ySuperscriptXOffset value="0"/>
    <ySuperscriptYOffset value="479"/>
    <yStrikeoutSize value="49"/>
    <yStrikeoutPosition value="258"/>
    <sFamilyClass value="0"/>
    <panose>
      <bFamilyType value="0"/>
      <bSerifStyle value="0"/>
      <bWeight value="0"/>
      <bProportion value="0"/>
      <bContrast value="0"/>
      <bStrokeVariation value="0"/>
      <bArmStyle value="0"/>
      <bLetterForm value="0"/>
      <bMidline value="0"/>
      <bXHeight value="0"/>
    </panose>
    <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/>
    <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
    <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
    <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
    <achVendID value="XXXX"/>
    <fsSelection value="00000000 01000000"/>
    <usFirstCharIndex value="97"/>
    <usLastCharIndex value="100"/>
    <sTypoAscender value="200"/>
    <sTypoDescender value="100"/>
    <sTypoLineGap value="0"/>
    <usWinAscent value="90"/>
    <usWinDescent value="10"/>
    <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
    <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
    <sxHeight value="100"/>
    <sCapHeight value="40"/>
    <usDefaultChar value="0"/>
    <usBreakChar value="0"/>
    <usMaxContext value="0"/>
    <usLowerOpticalPointSize value="0.0"/>
    <usUpperOpticalPointSize value="0.15"/>
  </OS_2>

  <hmtx>
    <mtx name=".notdef" width="90" lsb="0"/>
    <mtx name="b" width="90" lsb="0"/>
    <mtx name="d" width="90" lsb="0"/>
  </hmtx>

  <cmap>
    <tableVersion version="0"/>
    <cmap_format_4 platformID="3" platEncID="1" language="0">
      <map code="0x62" name="b"/><!-- LATIN SMALL LETTER B -->
      <map code="0x64" name="d"/><!-- LATIN SMALL LETTER D -->
    </cmap_format_4>
  </cmap>

  <loca>
    <!-- The 'loca' table will be calculated by the compiler -->
  </loca>

  <glyf>

    <!-- The xMin, yMin, xMax and yMax values
         will be recalculated by the compiler. -->

    <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="100" yMax="300">
      <contour>
        <pt x="10" y="10" on="1"/>
        <pt x="90" y="10" on="1"/>
        <pt x="90" y="90" on="1"/>
        <pt x="10" y="90" on="1"/>
        <pt x="10" y="10" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="b" xMin="0" yMin="0" xMax="100" yMax="300">
      <contour>
        <pt x="10" y="10" on="1"/>
        <pt x="90" y="10" on="1"/>
        <pt x="90" y="90" on="1"/>
        <pt x="10" y="90" on="1"/>
        <pt x="10" y="10" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="d" xMin="0" yMin="0" xMax="100" yMax="300">
      <contour>
        <pt x="10" y="10" on="1"/>
        <pt x="90" y="10" on="1"/>
        <pt x="90" y="90" on="1"/>
        <pt x="10" y="90" on="1"/>
        <pt x="10" y="10" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

  </glyf>

  <name>
    <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Foo
    </namerecord>
    <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Foo
    </namerecord>
    <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Regular
    </namerecord>
    <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
      foo
    </namerecord>
    <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Foo Regular
    </namerecord>
    <namerecord nameID="13" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Licensed under the Apache License, Version 2.0
    </namerecord>
    <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Version 1.000
    </namerecord>
  </name>

  <post>
    <formatType value="3.0"/>
    <italicAngle value="0.0"/>
    <underlinePosition value="0"/>
    <underlineThickness value="0"/>
    <isFixedPitch value="0"/>
    <minMemType42 value="0"/>
    <maxMemType42 value="0"/>
    <minMemType1 value="0"/>
    <maxMemType1 value="0"/>
  </post>

</ttFont>

所有3个符号都只是一个正方形:

<TTGlyph name="d" xMin="0" yMin="0" xMax="100" yMax="300">
  <contour>
    <pt x="10" y="10" on="1"/>
    <pt x="90" y="10" on="1"/>
    <pt x="90" y="90" on="1"/>
    <pt x="10" y="90" on="1"/>
    <pt x="10" y="10" on="1"/>
  </contour>
  <instructions/>
</TTGlyph>

在“字体查看器”中为我显示的内容是这样的:

enter image description here

在底角只有一些对角线。

在浏览器中,用字体设置字母bd的样式时,显示的字体几乎没有宽度或高度。看起来好像是一个很小的正方形。

enter image description here

想念我所缺少的。具体来说,以下是字形的实际显示/大小/位置所涉及的变量。

  • glyf表:
    • numberOfContours
    • xMin
    • yMin
    • xMax
    • yMax
    • endPtsOfContours
    • instructionLength
    • 标志
    • xCoordinates
    • yCoordinates
  • head表:
    • unitsPerEm
    • xMin
    • yMin
    • xMax
    • yMax
    • lowestRecPPEM
  • hhea表:
    • 上升者
    • 下降者
    • advanceWidthMax
    • minLeftSideBearing
    • minRightSideBearing
    • xMaxExtent:maxLeftSideBearing +(xMax-xMin),
  • os2表:我认为这不是必需的,虽然不确定,但是这里有一些与大小/位置有关的变量是其他表中其他变量的副本。
  • post表:
    • isFixedPitch(等宽字体)

我认为差不多了。请让我知道是否还需要

这些属性以某种方式控制字形的大小/位置。我认为上面的字形显示问题可能与这些变量的大小/比例有关。我不确定它们是否应为100、1000或10,000等的数量级。我不确定所有内容的“锚”大小是多少关。也许是unitsPerEm,或者它是基于xMinxMax以及yMinyMax(所以100、300)。

我目前具有的这些值是:

  • glyf表:
    • numberOfContours:1
    • xMin:0
    • yMin:0
    • xMax:100
    • yMax:300
    • endPtsOfContours:lastIndex
    • instructionLength:0
    • 标志:标志
    • xCoordinates:relativeCoordinates
    • yCoordinates:relativeCoordinates
  • head表:
    • unitsPerEm:2000
    • xMin:0
    • yMin:0
    • xMax:100
    • yMax:300
    • lowestRecPPEM:3
  • hhea表:
    • 上升者:200
    • 下界者:-100(但它始终变为100,所以也许-不必要)
    • advanceWidthMax:字形[i] .advanceWidth max
    • minLeftSideBearing:0
    • minRightSideBinging:100
    • xMaxExtent:maxLeftSideBearing +(xMax-xMin),
  • os2表:我认为这不是必需的,虽然不确定,但是这里有一些与大小/位置有关的变量是其他表中其他变量的副本。
  • post表:
    • isFixedPitch为true(因为现在比较简单)

我的问题是:

  1. 这些值应该是什么(在上面的列表中)。
  2. “锚定”值是什么,凡事都与该比例尺/大小有关(如果存在)。
  3. 我如何将字形放置到边界框中,以使其与屏幕上存在的任何其他字体齐平(或至少相对接近相同大小)。在我的字体中,我只有字符bd,因此如果我写abcd,则我的字符应该是为每个字符绘制一个简单的正方形(并且大小应大致相同)。现在,我只看到一条小斜线。

0 个答案:

没有答案