爬虫–简单woff文件的处理

爬虫–简单woff文件的处理woff文件Web开放字体格式(WebOpenFontFormat,简称WOFF)是一种网页所采用的字体格式标准。此字体格式发展于2009年,现在正由万维网联盟的Web字体工作小组标准化,以求成为推荐标准。此字体格式不但能够有效利用压缩来减少档案大小,并且不包含加密也不受DRM(数位著作权管理)限制。而且有时候再页面接受的时候其返回的是一个字符串:如下不过看其这个url,其实简单理解就是data:font/truetype;charset=utf-8;base64,+字符串有要尝试的可以

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

woff文件

Web开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采用的字体格式标准。此字体格式发展于2009年,现在正由万维网联盟的Web字体工作小组标准化,以求成为推荐标准。此字体格式不但能够有效利用压缩来减少档案大小,并且不包含加密也不受DRM(数位著作权管理)限制。

而且有时候再页面接受的时候其返回的是一个字符串:如下

:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irsgMRdM-1628057584150)(C:\Users\jhfan\AppData\Roaming\Typora\typora-user-images\image-20210804111837012.png)]

在这里插入图片描述

不过看其这个url,其实简单理解就是

data:font/truetype;charset=utf-8;base64,+字符串

有要尝试的可以试着用下面字符串:

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

Jetbrains全家桶1年46,售后保障稳定

前面是格式。可以将其用python的字符串转成woff格式文件。

import base64
with open('1.woff','wb') as f:
    f.write( base64.b64decode(jsobject["woff"]) )

其转成woff格式的文件,需要用High-Logic FontCreator这个软件可以将其打开。

如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXO93bux-1628057584154)(C:\Users\jhfan\AppData\Roaming\Typora\typora-user-images\image-20210804120210770.png)]

woff文件转xml –fontTools

对于woff文件,其实有时候我们很难观察到其具体的逻辑是什么,或者说是很难总结其规律。那就是需要将其转换成xml文件,而这个xml文件,说实话个人也不是很懂,只能说是简单的解读。其中就需要一个第三方的插件fontTools。使用文档

安装fontTools

pip install fontTools

fontTools使用其实很多,但是我用于其对字体进行逻辑整理,观察其规律。(用于爬虫)

将1.woff文件转成xml文件

from fontTools.ttLib import TTFont
font=TTFont('1.woff')
font.saveXML('1.xml')

很简单,就是简单的两个命令然后输出xml文件,打开看一下:

<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.25">

  <GlyphOrder>
    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
    <GlyphID id="0" name=".notdef"/>
    <GlyphID id="1" name="unie876"/>
    <GlyphID id="2" name="unie124"/>
    <GlyphID id="3" name="unic256"/>
    <GlyphID id="4" name="unie937"/>
    <GlyphID id="5" name="unif186"/>
    <GlyphID id="6" name="unib381"/>
    <GlyphID id="7" name="unib594"/>
    <GlyphID id="8" name="unib153"/>
    <GlyphID id="9" name="unib314"/>
    <GlyphID id="10" name="unie217"/>
  </GlyphOrder>

  <head>
    <!-- Most of this table will be recalculated by the compiler -->
    <tableVersion value="1.0"/>
    <fontRevision value="1.0"/>
    <checkSumAdjustment value="0xfa0f798e"/>
    <magicNumber value="0x5f0f3cf5"/>
    <flags value="00000000 00001001"/>
    <unitsPerEm value="1000"/>
    <created value="Sun Oct 13 04:00:31 2019"/>
    <modified value="Tue Aug 3 12:31:16 2021"/>
    <xMin value="18"/>
    <yMin value="-20"/>
    <xMax value="566"/>
    <yMax value="738"/>
    <macStyle value="00000000 00000000"/>
    <lowestRecPPEM value="8"/>
    <fontDirectionHint value="2"/>
    <indexToLocFormat value="0"/>
    <glyphDataFormat value="0"/>
  </head>

  <hhea>
    <tableVersion value="0x00010000"/>
    <ascent value="1060"/>
    <descent value="-340"/>
    <lineGap value="126"/>
    <advanceWidthMax value="600"/>
    <minLeftSideBearing value="0"/>
    <minRightSideBearing value="68"/>
    <xMaxExtent value="530"/>
    <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="2"/>
  </hhea>

  <maxp>
    <!-- Most of this table will be recalculated by the compiler -->
    <tableVersion value="0x10000"/>
    <numGlyphs value="11"/>
    <maxPoints value="57"/>
    <maxContours value="3"/>
    <maxCompositePoints value="0"/>
    <maxCompositeContours value="0"/>
    <maxZones value="2"/>
    <maxTwilightPoints value="0"/>
    <maxStorage value="10"/>
    <maxFunctionDefs value="10"/>
    <maxInstructionDefs value="0"/>
    <maxStackElements value="255"/>
    <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="4"/>
    <xAvgCharWidth value="554"/>
    <usWeightClass value="400"/>
    <usWidthClass value="5"/>
    <fsType value="00000000 00001000"/>
    <ySubscriptXSize value="721"/>
    <ySubscriptYSize value="979"/>
    <ySubscriptXOffset value="0"/>
    <ySubscriptYOffset value="196"/>
    <ySuperscriptXSize value="721"/>
    <ySuperscriptYSize value="979"/>
    <ySuperscriptXOffset value="0"/>
    <ySuperscriptYOffset value="672"/>
    <yStrikeoutSize value="68"/>
    <yStrikeoutPosition value="361"/>
    <sFamilyClass value="0"/>
    <panose>
      <bFamilyType value="2"/>
      <bSerifStyle value="0"/>
      <bWeight value="5"/>
      <bProportion value="3"/>
      <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="00010000 00000000 00000000 00000000"/>
    <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
    <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
    <achVendID value="PfEd"/>
    <fsSelection value="00000000 01000000"/>
    <usFirstCharIndex value="45395"/>
    <usLastCharIndex value="61830"/>
    <sTypoAscender value="1060"/>
    <sTypoDescender value="-340"/>
    <sTypoLineGap value="126"/>
    <usWinAscent value="1060"/>
    <usWinDescent value="340"/>
    <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
    <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
    <sxHeight value="0"/>
    <sCapHeight value="0"/>
    <usDefaultChar value="0"/>
    <usBreakChar value="32"/>
    <usMaxContext value="0"/>
  </OS_2>

  <hmtx>
    <mtx name=".notdef" width="100" lsb="0"/>
    <mtx name="unib153" width="600" lsb="0"/>
    <mtx name="unib314" width="600" lsb="0"/>
    <mtx name="unib381" width="600" lsb="0"/>
    <mtx name="unib594" width="600" lsb="0"/>
    <mtx name="unic256" width="600" lsb="0"/>
    <mtx name="unie124" width="600" lsb="0"/>
    <mtx name="unie217" width="600" lsb="0"/>
    <mtx name="unie876" width="600" lsb="0"/>
    <mtx name="unie937" width="600" lsb="0"/>
    <mtx name="unif186" width="600" lsb="0"/>
  </hmtx>

  <cmap>
    <tableVersion version="0"/>
    <cmap_format_4 platformID="0" platEncID="3" language="0">
      <map code="0xb153" name="unib153"/><!-- HANGUL SYLLABLE NYEOS -->
      <map code="0xb314" name="unib314"/><!-- HANGUL SYLLABLE DAESS -->
      <map code="0xb381" name="unib381"/><!-- HANGUL SYLLABLE DEB -->
      <map code="0xb594" name="unib594"/><!-- HANGUL SYLLABLE DDYAEM -->
      <map code="0xc256" name="unic256"/><!-- HANGUL SYLLABLE SWENH -->
      <map code="0xe124" name="unie124"/><!-- ???? -->
      <map code="0xe217" name="unie217"/><!-- ???? -->
      <map code="0xe876" name="unie876"/><!-- ???? -->
      <map code="0xe937" name="unie937"/><!-- ???? -->
      <map code="0xf186" name="unif186"/><!-- ???? -->
    </cmap_format_4>
    <cmap_format_0 platformID="1" platEncID="0" language="0">
    </cmap_format_0>
    <cmap_format_4 platformID="3" platEncID="1" language="0">
      <map code="0xb153" name="unib153"/><!-- HANGUL SYLLABLE NYEOS -->
      <map code="0xb314" name="unib314"/><!-- HANGUL SYLLABLE DAESS -->
      <map code="0xb381" name="unib381"/><!-- HANGUL SYLLABLE DEB -->
      <map code="0xb594" name="unib594"/><!-- HANGUL SYLLABLE DDYAEM -->
      <map code="0xc256" name="unic256"/><!-- HANGUL SYLLABLE SWENH -->
      <map code="0xe124" name="unie124"/><!-- ???? -->
      <map code="0xe217" name="unie217"/><!-- ???? -->
      <map code="0xe876" name="unie876"/><!-- ???? -->
      <map code="0xe937" name="unie937"/><!-- ???? -->
      <map code="0xf186" name="unif186"/><!-- ???? -->
    </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="18" yMin="-20" xMax="50" yMax="14">
      <contour>
        <pt x="18" y="14" on="1"/>
        <pt x="50" y="14" on="1"/>
        <pt x="50" y="-20" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unib153" xMin="36" yMin="-14" xMax="557" yMax="738">
      <contour>
        <pt x="329" y="738" on="1"/>
        <pt x="188" y="738" on="0"/>
        <pt x="123" y="661" on="1"/>
        <pt x="54" y="614" on="0"/>
        <pt x="54" y="533" on="1"/>
        <pt x="54" y="490" on="0"/>
        <pt x="92" y="469" on="1"/>
        <pt x="159" y="411" on="0"/>
        <pt x="165" y="385" on="1"/>
        <pt x="165" y="376" on="1"/>
        <pt x="109" y="357" on="0"/>
        <pt x="80" y="349" on="1"/>
        <pt x="36" y="265" on="0"/>
        <pt x="36" y="190" on="1"/>
        <pt x="36" y="99" on="0"/>
        <pt x="187" y="-14" on="0"/>
        <pt x="416" y="-14" on="0"/>
        <pt x="487" y="48" on="1"/>
        <pt x="557" y="99" on="0"/>
        <pt x="557" y="190" on="1"/>
        <pt x="557" y="265" on="0"/>
        <pt x="501" y="349" on="1"/>
        <pt x="487" y="357" on="0"/>
        <pt x="416" y="376" on="1"/>
        <pt x="416" y="385" on="1"/>
        <pt x="464" y="411" on="0"/>
        <pt x="522" y="469" on="1"/>
        <pt x="520" y="490" on="0"/>
        <pt x="520" y="533" on="1"/>
        <pt x="520" y="614" on="0"/>
        <pt x="464" y="661" on="1"/>
        <pt x="416" y="738" on="0"/>
      </contour>
      <contour>
        <pt x="329" y="653" on="1"/>
        <pt x="371" y="653" on="0"/>
        <pt x="412" y="640" on="1"/>
        <pt x="444" y="591" on="0"/>
        <pt x="444" y="490" on="0"/>
        <pt x="416" y="438" on="1"/>
        <pt x="398" y="402" on="0"/>
        <pt x="236" y="402" on="0"/>
        <pt x="164" y="438" on="1"/>
        <pt x="159" y="490" on="0"/>
        <pt x="159" y="591" on="0"/>
        <pt x="166" y="640" on="1"/>
        <pt x="243" y="653" on="0"/>
      </contour>
      <contour>
        <pt x="329" y="350" on="1"/>
        <pt x="379" y="350" on="0"/>
        <pt x="448" y="299" on="1"/>
        <pt x="487" y="252" on="0"/>
        <pt x="487" y="132" on="0"/>
        <pt x="448" y="91" on="1"/>
        <pt x="385" y="97" on="0"/>
        <pt x="212" y="97" on="0"/>
        <pt x="109" y="132" on="0"/>
        <pt x="109" y="252" on="0"/>
        <pt x="165" y="299" on="1"/>
        <pt x="212" y="350" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unib314" xMin="36" yMin="0" xMax="566" yMax="701">
      <contour>
        <pt x="398" y="701" on="1"/>
        <pt x="36" y="240" on="1"/>
        <pt x="36" y="149" on="1"/>
        <pt x="398" y="149" on="1"/>
        <pt x="398" y="0" on="1"/>
        <pt x="456" y="0" on="1"/>
        <pt x="456" y="149" on="1"/>
        <pt x="566" y="149" on="1"/>
        <pt x="566" y="219" on="1"/>
        <pt x="456" y="219" on="1"/>
        <pt x="456" y="701" on="1"/>
      </contour>
      <contour>
        <pt x="376" y="600" on="1"/>
        <pt x="398" y="600" on="1"/>
        <pt x="398" y="219" on="1"/>
        <pt x="125" y="219" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unib381" xMin="50" yMin="-14" xMax="537" yMax="738">
      <contour>
        <pt x="286" y="738" on="1"/>
        <pt x="187" y="738" on="0"/>
        <pt x="50" y="591" on="0"/>
        <pt x="50" y="477" on="1"/>
        <pt x="50" y="380" on="0"/>
        <pt x="108" y="317" on="1"/>
        <pt x="173" y="268" on="0"/>
        <pt x="266" y="268" on="1"/>
        <pt x="340" y="243" on="0"/>
        <pt x="437" y="299" on="0"/>
        <pt x="476" y="385" on="1"/>
        <pt x="458" y="385" on="1"/>
        <pt x="474" y="332" on="1"/>
        <pt x="474" y="219" on="0"/>
        <pt x="413" y="127" on="1"/>
        <pt x="371" y="55" on="0"/>
        <pt x="286" y="55" on="1"/>
        <pt x="165" y="55" on="0"/>
        <pt x="159" y="173" on="1"/>
        <pt x="50" y="173" on="1"/>
        <pt x="86" y="-14" on="0"/>
        <pt x="289" y="-14" on="1"/>
        <pt x="403" y="-13" on="0"/>
        <pt x="496" y="99" on="1"/>
        <pt x="537" y="207" on="0"/>
        <pt x="537" y="363" on="1"/>
        <pt x="537" y="540" on="0"/>
        <pt x="487" y="678" on="1"/>
        <pt x="416" y="738" on="0"/>
      </contour>
      <contour>
        <pt x="289" y="678" on="1"/>
        <pt x="357" y="678" on="0"/>
        <pt x="400" y="604" on="1"/>
        <pt x="461" y="547" on="0"/>
        <pt x="461" y="411" on="0"/>
        <pt x="354" y="317" on="0"/>
        <pt x="289" y="317" on="1"/>
        <pt x="205" y="317" on="0"/>
        <pt x="159" y="411" on="0"/>
        <pt x="159" y="477" on="1"/>
        <pt x="159" y="556" on="0"/>
        <pt x="213" y="678" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unib594" xMin="50" yMin="-14" xMax="537" yMax="701">
      <contour>
        <pt x="103" y="701" on="1"/>
        <pt x="54" y="318" on="1"/>
        <pt x="159" y="318" on="1"/>
        <pt x="165" y="350" on="0"/>
        <pt x="236" y="384" on="1"/>
        <pt x="250" y="405" on="0"/>
        <pt x="329" y="405" on="1"/>
        <pt x="375" y="396" on="0"/>
        <pt x="459" y="317" on="0"/>
        <pt x="459" y="219" on="1"/>
        <pt x="459" y="137" on="0"/>
        <pt x="357" y="79" on="0"/>
        <pt x="305" y="79" on="1"/>
        <pt x="236" y="79" on="0"/>
        <pt x="178" y="85" on="1"/>
        <pt x="138" y="114" on="0"/>
        <pt x="159" y="180" on="1"/>
        <pt x="50" y="180" on="1"/>
        <pt x="50" y="91" on="0"/>
        <pt x="144" y="41" on="1"/>
        <pt x="188" y="-14" on="0"/>
        <pt x="289" y="-14" on="1"/>
        <pt x="388" y="-14" on="0"/>
        <pt x="461" y="58" on="1"/>
        <pt x="537" y="105" on="0"/>
        <pt x="537" y="219" on="1"/>
        <pt x="537" y="342" on="0"/>
        <pt x="414" y="469" on="0"/>
        <pt x="312" y="469" on="1"/>
        <pt x="261" y="474" on="0"/>
        <pt x="236" y="453" on="1"/>
        <pt x="170" y="458" on="0"/>
        <pt x="147" y="411" on="1"/>
        <pt x="159" y="411" on="1"/>
        <pt x="157" y="678" on="1"/>
        <pt x="522" y="678" on="1"/>
        <pt x="522" y="701" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unic256" xMin="50" yMin="-14" xMax="537" yMax="738">
      <contour>
        <pt x="329" y="738" on="1"/>
        <pt x="179" y="738" on="0"/>
        <pt x="126" y="624" on="1"/>
        <pt x="50" y="501" on="0"/>
        <pt x="50" y="332" on="1"/>
        <pt x="50" y="179" on="0"/>
        <pt x="125" y="70" on="1"/>
        <pt x="165" y="-13" on="0"/>
        <pt x="301" y="-14" on="1"/>
        <pt x="403" y="-13" on="0"/>
        <pt x="537" y="127" on="0"/>
        <pt x="537" y="344" on="0"/>
        <pt x="421" y="469" on="0"/>
        <pt x="319" y="469" on="1"/>
        <pt x="248" y="469" on="0"/>
        <pt x="200" y="425" on="1"/>
        <pt x="165" y="405" on="0"/>
        <pt x="132" y="342" on="1"/>
        <pt x="159" y="342" on="1"/>
        <pt x="126" y="363" on="1"/>
        <pt x="126" y="484" on="0"/>
        <pt x="164" y="566" on="1"/>
        <pt x="215" y="656" on="0"/>
        <pt x="301" y="678" on="1"/>
        <pt x="424" y="656" on="0"/>
        <pt x="461" y="538" on="1"/>
        <pt x="536" y="538" on="1"/>
        <pt x="501" y="724" on="0"/>
      </contour>
      <contour>
        <pt x="297" y="411" on="1"/>
        <pt x="376" y="423" on="0"/>
        <pt x="421" y="349" on="1"/>
        <pt x="480" y="309" on="0"/>
        <pt x="480" y="140" on="0"/>
        <pt x="413" y="91" on="1"/>
        <pt x="367" y="79" on="0"/>
        <pt x="297" y="55" on="1"/>
        <pt x="231" y="55" on="0"/>
        <pt x="188" y="96" on="1"/>
        <pt x="159" y="147" on="0"/>
        <pt x="159" y="293" on="0"/>
        <pt x="232" y="411" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unie124" xMin="50" yMin="-14" xMax="537" yMax="738">
      <contour>
        <pt x="329" y="738" on="1"/>
        <pt x="165" y="724" on="0"/>
        <pt x="101" y="624" on="1"/>
        <pt x="50" y="529" on="0"/>
        <pt x="50" y="205" on="0"/>
        <pt x="101" y="90" on="1"/>
        <pt x="165" y="-14" on="0"/>
        <pt x="424" y="-14" on="0"/>
        <pt x="481" y="90" on="1"/>
        <pt x="537" y="205" on="0"/>
        <pt x="537" y="529" on="0"/>
        <pt x="481" y="624" on="1"/>
        <pt x="424" y="724" on="0"/>
      </contour>
      <contour>
        <pt x="329" y="656" on="1"/>
        <pt x="385" y="656" on="0"/>
        <pt x="435" y="550" on="1"/>
        <pt x="480" y="477" on="0"/>
        <pt x="480" y="226" on="0"/>
        <pt x="435" y="153" on="1"/>
        <pt x="385" y="57" on="0"/>
        <pt x="196" y="57" on="0"/>
        <pt x="165" y="153" on="1"/>
        <pt x="159" y="226" on="0"/>
        <pt x="159" y="477" on="0"/>
        <pt x="165" y="550" on="1"/>
        <pt x="196" y="656" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unie217" xMin="50" yMin="-14" xMax="537" yMax="738">
      <contour>
        <pt x="297" y="738" on="1"/>
        <pt x="191" y="738" on="0"/>
        <pt x="159" y="661" on="1"/>
        <pt x="76" y="601" on="0"/>
        <pt x="80" y="504" on="1"/>
        <pt x="144" y="504" on="1"/>
        <pt x="163" y="575" on="0"/>
        <pt x="240" y="656" on="0"/>
        <pt x="305" y="652" on="1"/>
        <pt x="375" y="656" on="0"/>
        <pt x="421" y="640" on="1"/>
        <pt x="445" y="591" on="0"/>
        <pt x="445" y="458" on="0"/>
        <pt x="367" y="393" on="0"/>
        <pt x="297" y="393" on="1"/>
        <pt x="250" y="393" on="1"/>
        <pt x="250" y="330" on="1"/>
        <pt x="329" y="330" on="1"/>
        <pt x="378" y="344" on="0"/>
        <pt x="459" y="265" on="0"/>
        <pt x="459" y="127" on="0"/>
        <pt x="421" y="97" on="1"/>
        <pt x="367" y="79" on="0"/>
        <pt x="329" y="79" on="1"/>
        <pt x="243" y="57" on="0"/>
        <pt x="190" y="90" on="1"/>
        <pt x="130" y="139" on="0"/>
        <pt x="138" y="210" on="1"/>
        <pt x="50" y="210" on="1"/>
        <pt x="58" y="87" on="0"/>
        <pt x="159" y="36" on="1"/>
        <pt x="187" y="-13" on="0"/>
        <pt x="329" y="-14" on="1"/>
        <pt x="400" y="-14" on="0"/>
        <pt x="537" y="105" on="0"/>
        <pt x="537" y="207" on="1"/>
        <pt x="537" y="266" on="0"/>
        <pt x="507" y="317" on="1"/>
        <pt x="476" y="350" on="0"/>
        <pt x="405" y="373" on="1"/>
        <pt x="520" y="411" on="0"/>
        <pt x="520" y="532" on="1"/>
        <pt x="520" y="614" on="0"/>
        <pt x="395" y="738" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unie876" xMin="80" yMin="0" xMax="520" yMax="701">
      <contour>
        <pt x="80" y="701" on="1"/>
        <pt x="80" y="624" on="1"/>
        <pt x="456" y="624" on="1"/>
        <pt x="187" y="0" on="1"/>
        <pt x="258" y="0" on="1"/>
        <pt x="520" y="637" on="1"/>
        <pt x="520" y="701" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unie937" xMin="99" yMin="0" xMax="369" yMax="701">
      <contour>
        <pt x="291" y="701" on="1"/>
        <pt x="283" y="667" on="0"/>
        <pt x="160" y="601" on="0"/>
        <pt x="99" y="594" on="1"/>
        <pt x="99" y="533" on="1"/>
        <pt x="200" y="547" on="0"/>
        <pt x="286" y="608" on="1"/>
        <pt x="286" y="0" on="1"/>
        <pt x="369" y="0" on="1"/>
        <pt x="369" y="701" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

    <TTGlyph name="unif186" xMin="58" yMin="0" xMax="536" yMax="738">
      <contour>
        <pt x="329" y="738" on="1"/>
        <pt x="200" y="738" on="0"/>
        <pt x="61" y="575" on="0"/>
        <pt x="76" y="477" on="1"/>
        <pt x="155" y="477" on="1"/>
        <pt x="147" y="547" on="0"/>
        <pt x="193" y="604" on="1"/>
        <pt x="231" y="678" on="0"/>
        <pt x="297" y="656" on="1"/>
        <pt x="369" y="656" on="0"/>
        <pt x="452" y="576" on="0"/>
        <pt x="452" y="510" on="1"/>
        <pt x="452" y="458" on="0"/>
        <pt x="388" y="387" on="1"/>
        <pt x="367" y="385" on="0"/>
        <pt x="282" y="293" on="1"/>
        <pt x="173" y="231" on="0"/>
        <pt x="144" y="173" on="1"/>
        <pt x="58" y="99" on="0"/>
        <pt x="58" y="0" on="1"/>
        <pt x="536" y="0" on="1"/>
        <pt x="536" y="85" on="1"/>
        <pt x="163" y="85" on="1"/>
        <pt x="174" y="142" on="0"/>
        <pt x="325" y="222" on="1"/>
        <pt x="437" y="317" on="0"/>
        <pt x="462" y="349" on="1"/>
        <pt x="530" y="423" on="0"/>
        <pt x="530" y="608" on="0"/>
        <pt x="413" y="738" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>

  </glyf>

  <name>
    <namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Created by font-carrier
    </namerecord>
    <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
      .PingFang SC
    </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">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Version 1.0
    </namerecord>
    <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="10" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Generated by svg2ttf from Fontello project.
    </namerecord>
    <namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True">
      http://fontello.com
    </namerecord>
    <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
      Created by font-carrier
    </namerecord>
    <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
      .PingFang SC
    </namerecord>
    <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
      Regular
    </namerecord>
    <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
      Version 1.0
    </namerecord>
    <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
      .PingFang-SC-Regular
    </namerecord>
    <namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
      Generated by svg2ttf from Fontello project.
    </namerecord>
    <namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
      http://fontello.com
    </namerecord>
  </name>

  <post>
    <formatType value="2.0"/>
    <italicAngle value="0.0"/>
    <underlinePosition value="14"/>
    <underlineThickness value="0"/>
    <isFixedPitch value="0"/>
    <minMemType42 value="0"/>
    <maxMemType42 value="0"/>
    <minMemType1 value="0"/>
    <maxMemType1 value="11"/>
    <psNames>
      <!-- This file uses unique glyph names based on the information found in the 'post' table. Since these names might not be unique, we have to invent artificial names in case of clashes. In order to be able to retain the original information, we need a name to ps name mapping for those cases where they differ. That's what you see below. -->
    </psNames>
    <extraNames>
      <!-- following are the name that are not taken from the standard Mac glyph order -->
      <psName name="unic256"/>
      <psName name="unib314"/>
      <psName name="unib594"/>
      <psName name="unib153"/>
      <psName name="unie876"/>
      <psName name="unie937"/>
      <psName name="unib381"/>
      <psName name="unie124"/>
      <psName name="unie217"/>
      <psName name="unif186"/>
    </extraNames>
  </post>

</ttFont>

开始下面是1到10的值如何获得

<GlyphOrder>
    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
    <GlyphID id="0" name=".notdef"/>
    <GlyphID id="1" name="unie876"/>
    <GlyphID id="2" name="unie124"/>
    <GlyphID id="3" name="unic256"/>
    <GlyphID id="4" name="unie937"/>
    <GlyphID id="5" name="unif186"/>
    <GlyphID id="6" name="unib381"/>
    <GlyphID id="7" name="unib594"/>
    <GlyphID id="8" name="unib153"/>
    <GlyphID id="9" name="unib314"/>
    <GlyphID id="10" name="unie217"/>
  </GlyphOrder>
from fontTools.ttLib import TTFont
font=TTFont('1.woff')
uni_list = font.getGlyphOrder()
for uni in uni_list:
    print(uni)
    
#输出
.notdef
unie876
…………
unie217

得到画图的轨迹参数: x,y

 <TTGlyph name="unif186" xMin="58" yMin="0" xMax="536" yMax="738">
      <contour>
        <pt x="329" y="738" on="1"/>
        <pt x="200" y="738" on="0"/>
        <pt x="61" y="575" on="0"/>
        <pt x="76" y="477" on="1"/>
        <pt x="155" y="477" on="1"/>
        <pt x="147" y="547" on="0"/>
        <pt x="193" y="604" on="1"/>
        <pt x="231" y="678" on="0"/>
        <pt x="297" y="656" on="1"/>
        <pt x="369" y="656" on="0"/>
        <pt x="452" y="576" on="0"/>
        <pt x="452" y="510" on="1"/>
        <pt x="452" y="458" on="0"/>
        <pt x="388" y="387" on="1"/>
        <pt x="367" y="385" on="0"/>
        <pt x="282" y="293" on="1"/>
        <pt x="173" y="231" on="0"/>
        <pt x="144" y="173" on="1"/>
        <pt x="58" y="99" on="0"/>
        <pt x="58" y="0" on="1"/>
        <pt x="536" y="0" on="1"/>
        <pt x="536" y="85" on="1"/>
        <pt x="163" y="85" on="1"/>
        <pt x="174" y="142" on="0"/>
        <pt x="325" y="222" on="1"/>
        <pt x="437" y="317" on="0"/>
        <pt x="462" y="349" on="1"/>
        <pt x="530" y="423" on="0"/>
        <pt x="530" y="608" on="0"/>
        <pt x="413" y="738" on="0"/>
      </contour>
      <instructions/>
    </TTGlyph>
 for i in font['glyf']["unif186"].coordinates:
        print(i)
 #输出329738)
…………
(413738

当然也可以得到这个轨迹中的on的值

for i in font['glyf']["unif186"].flags:
    print(i)
#输出 
1
0
………………
0

不过由于对文档的具体参数属性不太属性,所以暂时不知on的值有什么意义。

可以使用pyplot 对其进行画图看一下可以画出数字的

import matplotlib.pyplot as plt
import re

str = """ <TTGlyph name="unif186" xMin="58" yMin="0" xMax="536" yMax="738"> <contour> <pt x="329" y="738" on="1"/> <pt x="200" y="738" on="0"/> <pt x="61" y="575" on="0"/> <pt x="76" y="477" on="1"/> <pt x="155" y="477" on="1"/> <pt x="147" y="547" on="0"/> <pt x="193" y="604" on="1"/> <pt x="231" y="678" on="0"/> <pt x="297" y="656" on="1"/> <pt x="369" y="656" on="0"/> <pt x="452" y="576" on="0"/> <pt x="452" y="510" on="1"/> <pt x="452" y="458" on="0"/> <pt x="388" y="387" on="1"/> <pt x="367" y="385" on="0"/> <pt x="282" y="293" on="1"/> <pt x="173" y="231" on="0"/> <pt x="144" y="173" on="1"/> <pt x="58" y="99" on="0"/> <pt x="58" y="0" on="1"/> <pt x="536" y="0" on="1"/> <pt x="536" y="85" on="1"/> <pt x="163" y="85" on="1"/> <pt x="174" y="142" on="0"/> <pt x="325" y="222" on="1"/> <pt x="437" y="317" on="0"/> <pt x="462" y="349" on="1"/> <pt x="530" y="423" on="0"/> <pt x="530" y="608" on="0"/> <pt x="413" y="738" on="0"/> </contour> <instructions/> </TTGlyph> """

x = [int(i) for i in re.findall(r'<pt x="(.*?)" y=', str)]

y = [int(i) for i in re.findall(r'y="(.*?)" on=', str)]

plt.plot(x, y)

plt.show()

具体如下

在这里插入图片描述

大概可以看出一个数字2.其中将on的值全部改成0或者1好像也不影响图片。所以不太懂。

因为一共就10个数字,有时候对于返回的比如name=”unif186″对应的数字,进行一次训练即可知道其代表的是数字多少,这个就10个还好训练,以及数字格式不变,可以简单将x,y的值作为一个数字判断依据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213465.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VS中添加lib与dll

    VS中添加lib与dll参考与拓展阅读:https://blog.csdn.net/u012043391/article/details/54972127lib:1.附加包含目录—添加工程的头文件目录:项目->属性->配置属性->C/C++->常规->附加包含目录:加上头文件的存放目录;2.附加库目录—添加文件引用的lib静态库路径:项目->属…

    2022年7月26日
    4
  • Linux环境的搭建「建议收藏」

    Linux环境的搭建「建议收藏」1、准备工作工具:(网上下载,也可以留言评论,我给你链接)VMware-workstation-full-12.5.7.20721.exe(虚拟机)ubuntu-16.04.5-desktop-amd64.iso(ubuntu镜像文件)winscp(图形用户界面)备注:也可以不用虚拟机,直接在window系统下安装,但是比较麻烦,要分出盘给linux系统,相当于电脑有双系统。我是把lin…

    2022年5月29日
    39
  • EL表达式总结_el表达式循环

    EL表达式总结_el表达式循环一、EL表达式简介EL全名为ExpressionLanguage。EL主要作用:  1、获取数据    EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)  2、执行运算    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻…

    2022年7月28日
    53
  • CSS3自定义滚动条样式 -webkit-scrollbar「建议收藏」

    CSS3自定义滚动条样式 -webkit-scrollbar「建议收藏」有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了。那webkit浏览器是如何自定义滚动条的呢?前言webkit支持拥有overflow属性的区域,列表框,下拉菜单,textarea的滚动条自定义样式,所以用处还是挺大的。当然,兼容所有浏览器的滚动条样式目前是不存在的。演示

    2025年6月26日
    0
  • 【2022最新Java面试宝典】—— ElasticSearch面试题(31道含答案)

    【2022最新Java面试宝典】—— ElasticSearch面试题(31道含答案)目录1.elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段。1.1设计阶段调优1.2写入调优1.3查询调优1.4其他调优2.elasticsearch的倒排索引是什么3.elasticsearch索引数据多了怎么办,如何调优,部署3.1动态索引层面3.2存储层面3.3部署层面4.elasticsearch是如何实现master选举的5.详细描述一下Elasticsearch索引文档的过程6.详细描述一下

    2022年9月12日
    0
  • webpack打包优化_webpack打包及部署

    webpack打包优化_webpack打包及部署2019独角兽企业重金招聘Python工程师标准>>>…

    2022年10月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号