字体表绘制的理解

news2024/11/26 21:34:02

下载字体到项目根目录下,我们通过一些在写预览本地字体的网站,简单看一下

通过图片不难看出阴书与原文的对应关系,接下来通过程序去完成这一过程,通过 fonttools
处理 ttf,然后获取字体和文字对应的 xml 文件

下面简单地说明一下这个  xml 文件,这个文件节点有很多,但是重点有两部分:

<GlyphOrder>
    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
    <GlyphID id="0" name="glyph00000"/>
    <GlyphID id="1" name="x"/>
    <GlyphID id="2" name="unie31f"/>
    <GlyphID id="3" name="unie4dd"/>
  ...
</GlyphOrder>

GlyphOrder 节点下为该字体文件中所包含的文字

<TTGlyph name="unie01f" xMin="0" yMin="-98" xMax="961" yMax="818">
      <contour>
        <pt x="260" y="417" on="1"/>
        <pt x="296" y="365" on="0"/>
        <pt x="349" y="278" on="1"/>
    ...
      </contour>
    <contour>
    <pt x="364" y="301" on="1"/>
        <pt x="391" y="265" on="1"/>
        <pt x="555" y="328" on="0"/>
    ...
      </contour>
    ...
</TTGlyph>

TTGlyph 节点下,name为所绘制的文字,contour节点为字型信息,还有一些坐标,这些坐标意味着什么呢?看一下 1 对应的  name:

接下来让我们提取 「1」  在这个字体中对应的 name 的坐标

<TTGlyph name="unie31f" xMin="0" yMin="0" xMax="361" yMax="714">
      <contour>
        <pt x="297" y="714" on="1"/>
        <pt x="262" y="674" on="0"/>
        <pt x="160" y="612" on="0"/>
        <pt x="111" y="598" on="1"/>
        <pt x="111" y="516" on="1"/>
        <pt x="212" y="546" on="0"/>
        <pt x="279" y="614" on="1"/>
        <pt x="279" y="0" on="1"/>
        <pt x="361" y="0" on="1"/>
        <pt x="361" y="714" on="1"/>
      </contour>
      <instructions/>
    </TTGlyph>

这里on表示控制端点是否在曲线上的命令,在字体绘制里面,只有贝塞尔曲线的控制点不在曲线上,如果on=0,说明点在不在曲线上,如果on=1,说明点在曲线上。因此这里(297,714)on=1,(262,674)on=0,(160,612)on=0,(111,598)on=1,说明(297,714)和(111,598)分别为起点和终点,(262,674)和(160,612)为控制点的三次贝塞尔曲线,然后(111, 516)on=1,表示绘制(111,598)到(111, 516)的直线。

接下来我们将这些坐标连线,用程序将它图形化:

其中红色的部分,是将对应的直线连接起来了,弧线就省略了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式SQL查询引擎之ByConity

ByConity 是字节跳动面向现代数据栈的一款开源数仓系统&#xff0c;应用了大量数据库成熟技术&#xff0c;如列存引擎&#xff0c;MPP 执行&#xff0c;智能查询优化&#xff0c;向量化执行&#xff0c;Codegen&#xff0c;indexing&#xff0c;数据压缩&#xff0c;适合用于 O…

线程池和进程池,输出有区别吗?

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def fn(name):for i in range(1000):print(name,i)if __name__ __main__:with ThreadPoolExecutor(10) as t:for i in range(100):t.submit(fn,namef"线程{i}")with ProcessPoolExecutor(10…

艾体宝干货 | 如何分析关键网络性能指标?持续接收样品试用申请!

网络性能是企业顺利运营的重要基础&#xff0c;而Allegro流量分析仪作为一款强大的网络性能分析工具&#xff0c;为企业提供了深入了解网络运行状况的途径。在本文中&#xff0c;我们将探讨如何利用Allegro 流量分析仪分析关键网络性能指标&#xff0c;以优化网络性能、提高安全…

【综合案例】使用DevEco Studio编写京东登录界面

效果展示 模块拆分 布局容器 顶部 Logo输入框登录区域底部模块区域 知识点 复选框 Checkbox一段文本多个样式&#xff1a;Text 包裹 SpanRow 或 Column 空白区域填充&#xff1a;Blank线性渐变背景&#xff1a; .linearGradient({angle: 135, // 设置颜色渐变起始角度为顺时针…

BUGKU-WEB-文件包含

解题思路 你说啥我就干啥&#xff1a;点击一下试试你会想到PHP伪协议这方面去嘛&#xff0c;你有这方面的知识储备吗&#xff1f;看到?fileXXX.php&#xff0c;那不就是典型的文件包含吗&#xff1f;这里需要用的一个伪协议php://filter:是一种元封装器&#xff0c; 设计用于…

Python学习计划——7.2数据可视化

数据可视化是数据分析的重要组成部分&#xff0c;通过图表和图形将数据直观地展示出来&#xff0c;帮助我们发现数据中的模式和趋势。Python中常用的数据可视化库有matplotlib和seaborn。以下是对这些库的详细讲解及可运行的Python案例。 1. matplotlib 库 matplotlib 是一个…

RuntimeError: TensorRT currently only builds wheels for x86_64 processors

jetson 板卡似乎不能直接使用pip安装tensorrt&#xff0c;可以通过以下方式进行安装 在官网下载对应的tensorrt包 Log in | NVIDIA Developer 在包里面有python库 pip install 对应python版本的库 安装完成之后在终端 import tensorrt 测试是否安装成功

ubuntu 查找文件find

find -name xxx 查找当前路径下名字为xxx的文件 find . -name xxx 查找当前路径下名字为 train_logs的文件 find . -name train_logs 具体说明 【Ubuntu】find命令_ubuntu find命令-CSDN博客 其中&#xff0c;路径 指定要搜索的目录路径&#xff0c;而 表达式 用于指定匹配条…

单片机外围设备-TFTLCD

stm32f103zet6的fsmc接口实现 8080 时序驱动tftlcd显示&#xff0c;驱动IC是ILI9341。 1、什么是FSMC? FSMC (flexible static memory controller)灵活的静态存储控制器&#xff0c;可以驱动SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。 1、1fsmc框图 1、2fsmc外部设…

18万就能买华为智驾车,你当不了韭菜!

文 | AUTO芯球 作者 | 雷慢 万万没想到啊&#xff0c; 把智能驾驶汽车价格打到最低的&#xff0c; 居然是智驾实力最强的华为&#xff0c; 这你敢信吗 就现在&#xff0c;17.99万就能买华为智驾的车了&#xff0c; 它就是长安和华为合作的首个车型&#xff0c; 深蓝S07…

Python酷库之旅-第三方库Pandas(055)

目录 一、用法精讲 206、pandas.Series.reset_index方法 206-1、语法 206-2、参数 206-3、功能 206-4、返回值 206-5、说明 206-6、用法 206-6-1、数据准备 206-6-2、代码示例 206-6-3、结果输出 207、pandas.Series.sample方法 207-1、语法 207-2、参数 207-3、…

【Python学习手册(第四版)】学习笔记09.1-Python对象类型-元组

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 目录 元组 元组操作 实际应用 元组的特殊语法&#xff1a;逗号和圆括号 转换、方法以及不可变性 index、count及其他方法 有了列表为什么还要元组 元组 元…

可视化目标检测算法推理部署(二)YOLOv8模型图像推理

在先前的RT-DETR中&#xff0c;博主使用ONNX模型文件进行了视频、图像的推理&#xff0c;在本章节&#xff0c;博主打算使用YOLOv8模型进行推理&#xff0c;因此&#xff0c;我们除了需要获取YOLOv8的ONNX模型文件外&#xff0c;还需要进行一些额外的操作&#xff0c;如NMS后处…

PHP在线加密系统源码

历时半年&#xff0c;它再一次迎来更新[飘过] 刚刚发的那个有点问题&#xff0c;重新修了一下 本次更新内容有点多 1. 更新加密算法&#xff08;这应该是最后一次更新加密算法了&#xff0c;以后主要更新都在框架功能上面了&#xff09; 2. 适配php56-php74 3. 取消批量加…

【机器学习西瓜书学习笔记——神经网络】

机器学习西瓜书学习笔记【第四章】 第五章 神经网络5.1神经元模型5.2 感知机与多层网络学习感知机学习率成本/损失函数梯度下降 5.3 BP神经网络&#xff08;误差逆传播&#xff09;5.4 全局最小与局部极小5.5 其他常见神经网络RBF网络RBF 与 BP 最重要的区别 ART网络 第五章 神…

【Linux】进程间通信 —— 管道与 System V 版本通信方式

目录 为什么有进程间通信&#xff1f;进程间通信的目的是什么&#xff1f; 管道 匿名管道 父子进程共享管道 命名管道 共享内存 概念 原理 共享内存和内存映射&#xff08;文件映射&#xff09;的区别 使用 消息队列 概念 使用 信号量 概念 使用 IPCS 命令 S…

【人工智能专栏】Cross Entropy 交叉熵损失解析

Cross Entropy 交叉熵 信息熵 在信息世界中我们所有的信息都可以抽象为“情况”,用二进制 bit 来表达,正因为每个 bit 都有 0 1 两种“情况”,所以 n n n 个 bit 可以编码 2 n 2^n 2

Java----代理

什么是代理&#xff1f; 在Java中&#xff0c;代理是一种用于创建一个或多个服务的中间层&#xff0c;它可以拦截并处理程序对实际服务对象的请求。代理模式是一种设计模式&#xff0c;属于结构型模式&#xff0c;它允许程序员在不修改实际对象代码的情况下&#xff0c;增强或控…

PHP反序列化漏洞从入门到深入8k图文介绍,以及phar伪协议的利用

文章参考&#xff1a;w肝了两天&#xff01;PHP反序列化漏洞从入门到深入8k图文介绍&#xff0c;以及phar伪协议的利用 前言 本文内容主要分为三个部分&#xff1a;原理详解、漏洞练习和防御方法。这是一篇针对PHP反序列化入门者的手把手教学文章&#xff0c;特别适合刚接触PH…

杭州等保测评的备案流程

杭州等级保护备案和测评&#xff0c;构筑了一座坚实的数字安全桥梁&#xff0c;其过程和条件清楚而又重要。这篇文章会详细介绍一些必要的步骤&#xff0c;以帮助你顺利地完成信息系统的安全和合规。 1. 系统识别与自评 在此基础上&#xff0c;首先要明确信息系统所承载的业务…