kre*_*eek 41 linux command-line shell fonts
给定一个字体文件目录(TTF 和 OTF),我想检查每种字体并确定它的样式(常规、斜体、粗体、粗斜体)。是否有用于 unix 风格的操作系统的命令行工具可以执行此操作?或者有谁知道如何从 TTF 或 OTF 字体文件中提取元数据?
cjm*_*cjm 39
我认为您正在寻找otfinfo。似乎没有直接进入 Subfamily的选项,但您可以这样做:
otfinfo --info *.ttf | grep Subfamily
Run Code Online (Sandbox Code Playgroud)
请注意,我查看的许多字体使用“倾斜”而不是“斜体”。
miv*_*ivk 24
在 Linux 中,如果你有 .ttf 字体,你很可能也有fontconfig,它随fc-scan实用程序一起提供。您可以解析输出以获得您想要的信息,或者使用错误记录的--format选项。
例如:
fc-scan --format "%{foundry} : %{family}\n" /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式打印的字体属性如下所示:http : //www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21
某些属性以多种语言列出。例如,%{fullname}可能是一个列表。在这种情况下,%{fullnamelang}将列出语言。如果这将您的语言显示在列表的第四位,您可以将其%{fullname[3]}用作格式字符串以仅以该语言打印全名。
这种语言的东西非常不方便,我最终编写了一个完整的 Perl 脚本来仅用一种语言列出我想要的信息:
#!/usr/bin/perl
use strict;
my $VERSION=0.1;
my $debug=1;
my @wanted = qw(foundry family fullname style weight slant width spacing file);
my @lang_dependent = qw(family fullname style);
my $lang = "en";
my $separator = ", ";
use File::Basename;
use Data::Dumper; $Data::Dumper::Sortkeys = 1;
my $me = basename $0;
die "Usage: $me FILENAME\n" unless @ARGV;
my $fontfile = shift;
unless (-f $fontfile) {
die "Bad argument: '$fontfile' is not a file !\n";
}
my $fc_format = join( "\\n", map { "\%{$_}" } @wanted );
my @info = `fc-scan --format "$fc_format" "$fontfile"`;
chomp @info;
my %fontinfo;
@fontinfo{@wanted} = @info;
if ( grep /,/, @fontinfo{ @lang_dependent } ) {
my $format = join( "\\n", map { "\%{${_}lang}" } @lang_dependent );
my @langs = `fc-scan --format "$format" "$fontfile"`;
for my $i (0..$#lang_dependent) {
my @lang_list = split /,/, $langs[$i];
my ($pos) = grep { $lang_list[$_] ~~ $lang } 0 .. $#lang_list;
my @vals = split /,/, $fontinfo{$lang_dependent[$i]};
$fontinfo{$lang_dependent[$i]} = $vals[$pos];
}
}
warn Dumper(\%fontinfo), "\n" if $debug;
$fontinfo{'fullname'} ||= $fontinfo{'family'}; # some old fonts don't have a fullname? (WINNT/Fonts/marlett.ttf)
print join($separator, @fontinfo{@wanted}), "\n";
Run Code Online (Sandbox Code Playgroud)