我正在尝试为任意otf文件设置家族和子家族的名称。我的代码如下:
#!/usr/bin/perl
use strict;
use warnings;
use Font::TTF::Font;
use Data::Dumper;
# Open the font file.
my $font = Font::TTF::Font->open($ARGV[0]) || die ("Couldn't open TTF '$ARGV[0]'\n");
$font->{'name'}->read();
$font->{'name'}->set_name(1, "Bluster Doodads");
$font->{'name'}->set_name(6, "BlusterDoodads");
$font->{'name'}->set_name(17, "BlusterDoodadsLow", [[0, 0], [3,0]]);
print Dumper($font->{name}->{strings}), "\n";
$font->out("./test.otf");
According to Microsoft's documentation
,实际上我不应该更改名称ids 1或2,因为一些旧的软件可能会变得混乱,例如,对于给定的家族,有四个以上的子家族。我应该改用16号和17号身份证。
但是,我已经测试了更改ids 1和ids 2,只是为了检查这段代码是否正常工作。结果的二进制otf有我的新字符串,所以它看起来在这个意义上工作。然而,这并没有愚弄Macos Mojave的字体手册,它仍然相信它是原始文件(尽管我已经更改了这些ID和许多其他的ID,包括唯一的名称)。
什么元数据将向字体集(和其他应用程序)发出信号,表明这是一种与已安装的任何其他字体不同的新字体?这是名字表之外的东西吗?
最后,如果id 16和17还不存在,如何将它们添加到字体中?
The documentation
除非@cover是
提供。
perl(32468,0x1196fa5c0) malloc: can't allocate region
*** mach_vm_map(size=1123971692511232) failed (error code=3)
perl(32468,0x1196fa5c0) malloc: *** set a breakpoint in malloc_error_break to debug
Out of memory!
所以我不确定自己是否能在这个问题上一帆风顺,直到我找到了正确的语法。