Linux
是否有可以分析字型檔的 unix 命令行工具?
給定一個字型檔(TTF 和 OTF)目錄,我想檢查每種字型並確定它是什麼樣式(正常、斜體、粗體、粗體-斜體)。是否有適用於 unix 風格的作業系統的命令行工具可以做到這一點?或者有誰知道如何從 TTF 或 OTF 字型檔中提取元數據?
我認為您正在尋找otfinfo。似乎沒有直接進入子家庭的選項,但你可以這樣做:
otfinfo --info *.ttf | grep Subfamily
請注意,我查看的許多字型使用“斜體”而不是“斜體”。
在 Linux 中,如果你有 .ttf 字型,你很可能也有fontconfig,它隨
fc-scan
實用程序一起提供。您可以解析輸出以獲取所需資訊,或使用文件不完整的--format
選項。例如:
fc-scan --format "%{foundry} : %{family}\n" /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf
您可以通過這種方式列印的字型屬性如下所示: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";