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


32

フォントファイル(TTFおよびOTF)のディレクトリを指定して、各フォントを検査し、そのスタイル(通常、斜体、太字、太字、斜体)を判断したいと思います。これを行うことができるUNIXフレーバーのオペレーティングシステム用のコマンドラインツールはありますか?または、TTFまたはOTFフォントファイルからメタデータを抽出する方法を知っている人はいますか?

回答:


30

otfinfoを探していると思います。サブファミリーに直接アクセスするオプションはないようですが、次のことができます。

otfinfo --info *.ttf | grep Subfamily

私が調べた多くのフォントは、「斜体」ではなく「斜体」を使用していることに注意してください。


10
パーフェクト、ありがとう!興味のある人のために私はOS X上だとして醸造を経てそれをインストールbrew install lcdf-typetools
kreek

FWIW、MacPortsパッケージも呼び出されますlcdf-typetools(およびの依存関係でtexlive-fontutilsあるため、TeXを使用している人には既にインストールされている可能性があります)。
hans_meine

15

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}言語がリストされます。リストの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";

素晴らしい、ヒント(およびスクリプト..まだスクリプトをテストしていませんが)に感謝します。ライセンス/著作権情報も取得する方法があるかどうか知っていますか?%{license}、%{copyright}を試してみましたが、フォーマットはありませんでしたが、何も得られませんでしたが、FontForgeはそれを表示できます。
-insaner

実際、fc-scanは著作権を表示していないようです。foundryそれはあなたに最も近いです。しかしotfinfo -i、cjmによって提案されたように、表示します。
mivk

ああ、それは素晴らしいです。私はインストールされlcdf-typetoolsotfinfo -i提案されたとおりに走りました、そしてそれはトリックをしました、ありがとう!(そして、@ cjmにも+1を付けました)。
insaner

fc-scanは、プログラムでフォントを参照するために使用されるフォント「フルネーム」を取得するのに最適です。
mpr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.