フォントファイルを分析できるUnixコマンドラインツールはありますか?

フォントファイルを分析できるUnixコマンドラインツールはありますか?

指定されたフォントファイル(TTFおよびOTF)ディレクトリで各フォントを確認し、そのスタイル(一般、イタリック体、太字、太字イタリック体)を決定したいと思います。これを実行できるUNIXスタイルのオペレーティングシステム用のコマンドラインツールはありますか?それとも、TTFまたはOTFフォントファイルからメタデータを抽出する方法を知っている人はいますか?

答え1

探していると思います。オルフェンについて。おそらくオプションサブファミリーに直接移動します。次のようにできます。

otfinfo --info *.ttf | grep Subfamily

私が見た多くのフォントは、「イタリック体」の代わりに「オブリック」を使用しました。

答え2

Linux に .ttf フォントがある場合は、次のフォントもある可能性があります。フォント構成、このユーティリティと一緒に提供されます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}言語がリストされます。言語がリスト内で4番目に表示されている場合は、%{fullname[3]}フォーマット文字列を使用してその言語でのみ名前を印刷できます。

この言語操作はあまりにも不便であり、最終的には1つの言語で必要な情報を一覧表示する完全な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";

関連情報