ttf文件 python 打开_[译]JS解析TTF字体文件

本文介绍如何在网页上通过JavaScript读取并解析TTF字体文件,包括使用FileReader API读取文件、处理拖放事件,以及创建BinaryReader类解析C结构体。通过解析TrueType字体文件的头部信息,获取字形轮廓坐标,并最终在网页上展示这些字形。文章还提供了用于读取和解析字体文件的示例代码。
摘要由CSDN通过智能技术生成

把字体拖到下边的方框,获取其中的奥妙!点此获取示例ttf字体文件。

TTF文件拖到这里

在这篇文章,我们计划操作如下:

将字体文件拖入网页,并读取之

尽管ttf文件是为C语言读取设计的,但我们仍试图解析之

读取文件的字形数目,并定位各个字形轮廓的位置

解析每个字形轮廓

最后,把这些字形轮廓呈现到网页上

本文由原始文档从零开始解析ttf文件,并获取字形轮廓坐标。如果需要完整解析ttf文件,并获取字体文件的各个属性,以下第三方库可能是更优选择:

—–译者注

用Javascript读取文件

这… 好像很危险。 不过,放心吧,只有把文件拖动到网页上,才能用javascript读取它。通过处理dragover(拖入方框)和drop(释放鼠标)事件,我们可以读取拖进方框的文件。

在页面接听到drop事件的时候,可以获取该文件的引用(指针),进而读取该文件。这个操作无需与服务器进行交互。 我们还得处理dragover事件,不然它将不能工作。

var dropTarget = document.getElementById("dropTarget");

dropTarget.ondragover = function(e) {

e.preventDefault();

};

dropTarget.ondrop = function(e) {

e.preventDefault();

if (!e.dataTransfer || !e.dataTransfer.files) {

alert("没有读取到文件");

return;

}

var reader = new FileReader();

reader.readAsArrayBuffer(e.dataTransfer.files[0]);

reader.onload = function(e) {

ShowTtfFile(reader.result);

};

};

HTML5文件对象不太方便后续的操作。要想获取文件的原始数据,只能用FileReader异步读取它。我们可以读取为base64编码的字符串或ArrayBuffer。在这里,我们读取ttf文件为ArrayBuffer类型。

解析C结构体

TrueType文件设计的时候,计算机内存还很小。它的设计思路是,先把硬盘上的字体文件拷贝到运行内存,然后在适当的位置读取。字体文件中甚至直接存入了C结构体。要读取TrueType文件,只要把它加载到内存就可以了。我们将做类似的事情。不过,首先需要一些功能函数,以便在文件适当的位置查找并读取各种数据类型。 这个类可以实现以上目的。

function BinaryReader(arrayBuffer)

{

assert(arrayBuffer instanceof ArrayBuffer);

this.pos = 0;

this.data = new Uint8Array(arrayBuffer);

}

BinaryReader.prototype = {

seek: function(pos) {

assert(pos >=0 && pos <= this.data.length);

var oldPos = this.pos;

this.pos = pos;

return oldPos;

},

tell: function() {

return this.pos;

},

getUint8: function() {//读取单字节无符号整型

assert(this.pos < this.data.length);

return this.data[this.pos++];

},

getUint16: function() {//读取双字节无符号整型

return ((this.getUint8() << 8) | this.getUint8()) >>> 0;

},

getUint32: function() {//读取四字节无符号整型

return this.getInt32() >>> 0;

},

getInt16: function() {//读取双字节有符号整型

var result = this.getUint16();

if (result & 0x8000) {

result -= (1 << 16);

}

return result;

},

getInt32: function() {//读取四字节有符号整型

return ((this.getUint8() << 24) |

(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤下载ttf字体文件: 1. 打开终端或命令提示符,并导航到Matplotlib的ttf目录。可以使用以下命令: ``` cd ~/.local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf ``` 2. 复制你想要下载的ttf字体文件ttf目录下。可以使用以下命令: ``` cp /mnt/hgfs/DirShare/SimHei.ttf . ``` 3. 清除Matplotlib的缓存文件。可以使用以下命令: ``` rm ~/.cache/matplotlib/fontlist-v300.json ``` 这样,你就成功下载了ttf字体文件,并可以在Matplotlib中使用它了。如果你想在Python中使用ttf字体文件,你可以使用以下代码: ``` import matplotlib.pyplot as plt plt.rcParams\['font.sans-serif'\] = \['SimHei'\] ``` 这样,你就可以在Matplotlib中使用SimHei字体了。希望对你有帮助!\[1\] #### 引用[.reference_title] - *1* [Python3 | UserWarning: findfont: Font family [‘SimHei‘] not found. Falling back to DejaVu Sans.](https://blog.csdn.net/Neutionwei/article/details/108311811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python游戏开发——字体文件下载](https://blog.csdn.net/weixin_63373973/article/details/130910522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python如何获取免费的可以商用的字体](https://blog.csdn.net/zhongkeyuanchongqing/article/details/120319566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值