爬虫–简单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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux系统对硬盘分区_centos怎么分区

    linux系统对硬盘分区_centos怎么分区Linux操作系统磁盘分区操作及原理,Linux系统网络环境的配置方法。

    2022年9月15日
    2
  • Postman使用教程_笔记本初学者入门教程

    Postman使用教程_笔记本初学者入门教程安装本文只是基于Chrome浏览器的扩展插件来进行的安装,并非单独应用程序。首先,你要台电脑,其次,安装有Chrome浏览器,那你接着往下看吧。1.官网安装(别看)打开官网,https://www.getpostman.com点击那个灰灰色的「ChromeApp(Free)」按钮。正常情况会跳转到Chrome网上应用店界面,但是,由于,嗯,你懂的!你一般看到的是第…

    2022年9月18日
    1
  • 获取数据库中所有表名

    获取数据库中所有表名

    2021年10月19日
    45
  • iOS的高德地图标注特定位置

    iOS的高德地图标注特定位置在开发时有时候遇到项目里面需要展示公司的位置,这时如果导入百度地图什么的就太浪费资源,而且还占内存这时只要调用自动高德地图的就行了自己写一个控制器,导入框架现在导入系统框架只要多打次就能出来了,没必要去link添加1#import”MapViewCtl.h”2#import<CoreLocation/CoreLocation.h>3#impo…

    2022年5月21日
    56
  • CPU流水线详解_多周期流水线cpu

    CPU流水线详解_多周期流水线cpu为什么Intel处理器主频这么高,而AMD处理器主频都很低?是不是AMD处理器性能不如Intel?我们一般的回答都是,因为Intel处理器与AMD处理器内部构架不同,所以导致了这种情况,还有一种具体一点的回答就是因为Intel处理器流水线长,那到底流水线与CPU主频具体有什么关系呢?今天给大家带来一篇我以前刊登在《电脑报》硬件板块技术大讲堂版面的一篇原创文章。关于CPU流水线的知识,很多报纸杂

    2022年8月20日
    22
  • ERROR 1100 (HY000): Table ‘api_category’ was not locked with

    ERROR 1100 (HY000): Table ‘api_category’ was not locked with

    2022年2月11日
    44

发表回复

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

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