SourceHanSans-Pixel icon indicating copy to clipboard operation
SourceHanSans-Pixel copied to clipboard

您好,可否提供点WorkBench.ipynb的注释

Open ArcheyChen opened this issue 2 years ago • 1 comments

大佬您好,我这几天在寻找将字体移植到嵌入式系统(GBA)上的工具,目前发现这个项目是我见过的最好使的一个项目。目前已经把字体显示成功移植上去了。

但是我对字体不太了解,不太看得懂生成字体中的一些操作。

如: 1.为什么freetype中设置字体像素,以及后面的FB的像素不太一致,是为了去除多余的Padding吗? 2.face.set_var_design_coords((400,)),这个设计空间坐标的参数范围该如何获取 3.PLANES = [(0x00, 0xFF)],for rune in range(p << 8, (p << 8) + 256):,这几个神奇的数字是什么,对应的是字体还是编码中的什么范围吗?我该在哪寻找这些数据。

如果大佬有时间,希望能给代码加一些注释,非常感谢。 这样子如果想要自己获取字符集,比如说我只想要简体,不想要繁体和日文韩文,那我就可以自己裁剪了。

ArcheyChen avatar Apr 04 '23 03:04 ArcheyChen

你好!很高兴这个项目能帮助到你。关于你的问题,我尽量给出详细的解答。

在设置FreeType中的字体像素和FB像素时,它们可能不完全匹配,这是因为我们需要确保字体能适应指定的像素大小。有时,字体在指定的像素大小中可能包含一些额外的空间(padding)。通过设置不同的像素大小,我们可以确保字体在嵌入式系统中以适当的大小显示。

face.set_var_design_coords((400,))设置设计坐标。这个参数通常用于可变字体(变体字体是具有不同轴的多个字体变体的字体文件)。在这个例子中,400可能是字重轴的一个示例值。你可以在字体的设计空间范围内选择合适的值,使字体看起来更清晰或更粗。通常,你可以在字体文件的元数据中找到这些值。具体而言,你可以查阅字体的fvar(字体变量)表或使用ftdump工具(它是FreeType库的一部分)来查看字体文件的详细信息。

关于问题3,PLANES = [(0x00, 0xFF)]表示的是Unicode平面范围。在这个例子中,范围是从0x0000到0xFFFF。在这个范围内,每个字符块包含256个字符。所以,for rune in range(p << 8, (p << 8) + 256):循环处理每个字符块。

如果你只需要简体中文字符,可以使用相应的Unicode范围。例如,你可以设置PLANES为常用的简体中文字符所在的字符块范围,如下所示:

PLANES = [(0x4E, 0x9F)]

这将覆盖从0x4E00到0x9FFF的字符范围,包括大部分常用的简体中文字符。请注意,这里0x4E和0x9F对应的是字符块的范围,而不是具体的字符范围。

44670 avatar Apr 04 '23 05:04 44670