Czy istnieje narzędzie wiersza polecenia unix, które może analizować pliki czcionek?


32

Biorąc pod uwagę katalog plików czcionek (TTF i OTF), chciałbym sprawdzić każdą czcionkę i ustalić, jaki to styl (zwykły, kursywa, pogrubienie, pogrubienie i kursywa). Czy istnieje narzędzie wiersza polecenia dla systemów operacyjnych o smaku unix, które mogą to zrobić? A może ktoś wie, jak wyodrębnić metadane z pliku czcionek TTF lub OTF?

Odpowiedzi:


30

Myślę, że szukasz otfinfo . Wydaje się, że nie ma opcji bezpośredniego dostępu do podrodziny, ale możesz zrobić:

otfinfo --info *.ttf | grep Subfamily

Zauważ, że wiele czcionek, na które patrzyłem, używa „Oblique” zamiast „Italic”.


10
Perfekcyjnie, dzięki! Dla zainteresowanych jestem na OS X i zainstalowałem go poprzez brew withbrew install lcdf-typetools
kreek

FWIW, pakiet MacPorts jest również nazywany lcdf-typetools(i jest zależny od texlive-fontutils, więc może być już zainstalowany dla osób używających TeX).
hans_meine

15

W systemie Linux, jeśli masz czcionki .ttf, najprawdopodobniej masz także fontconfig , który jest dostarczany z fc.scannarzędziem. Możesz przeanalizować dane wyjściowe pod kątem potrzebnych informacji lub użyć źle udokumentowanej --formatopcji.

Na przykład:

fc-scan --format "%{foundry} : %{family}\n" /usr/share/fonts/truetype/msttcorefonts/arialbd.ttf

Właściwości czcionki, które można wydrukować w ten sposób, pokazano tutaj: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Niektóre właściwości są wymienione w wielu językach. Na przykład %{fullname}może być lista. W takim przypadku %{fullnamelang}wyświetli listę języków. Jeśli pokazuje to Twój język na czwartej pozycji na liście, możesz użyć %{fullname[3]}jako ciągu formatu do wydrukowania pełnej nazwy tylko w tym języku.

Ponieważ jest to dość niewygodne, napisałem pełny skrypt Perla, aby wyświetlić informacje, które chciałem tylko w jednym języku:

#!/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";

Świetnie, dziękuję za podpowiedź (i skrypt ... chociaż nie testowałem jeszcze skryptu). Czy wiesz, czy istnieje sposób na uzyskanie informacji o licencji / prawach autorskich? Próbowałem% {licence},% {copyright} i żadnego formatu, ale żaden z nich nic nie dał, podczas gdy fontforge jest w stanie mi to pokazać.
insaner

Rzeczywiście, skanowanie FC nie wydaje się pokazywać praw autorskich. foundryjest najbliższy, jaki ci daje. Ale otfinfo -isugerowane przez cjm wyświetla to.
mivk

Ach, to świetnie, zainstalowałem lcdf-typetoolsi pobiegłemotfinfo -i zgodnie z sugestią, i to załatwiło sprawę, dzięki! (I dałem @cjm również +1).
insaner

fc-scan doskonale nadaje się do uzyskiwania „pełnej nazwy” czcionki używanej do odwoływania się do czcionki w programach.
mpr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.