Esiste uno strumento da riga di comando unix in grado di analizzare i file dei caratteri?


32

Data una directory di file di font (TTF e OTF), vorrei ispezionare ogni font e determinare di che stile sia (normale, corsivo, grassetto, grassetto-corsivo). Esiste uno strumento da riga di comando per sistemi operativi unix che può farlo? O qualcuno sa come estrarre i metadati da un file di font TTF o OTF?

Risposte:


30

Penso che tu stia cercando otfinfo . Non sembra esserci un'opzione per accedere direttamente alla sottofamiglia, ma potresti fare:

otfinfo --info *.ttf | grep Subfamily

Nota che alcuni dei caratteri che ho visto usano "Oblique" invece di "Italic".


10
Perfetto grazie! Per gli interessati sono su OS X e l'ho installato tramite brew conbrew install lcdf-typetools
kreek

FWIW, viene anche chiamato il pacchetto MacPorts lcdf-typetools(ed è una dipendenza di texlive-fontutils, quindi potrebbe già essere installato per le persone che usano TeX).
Hans_meine,

15

In Linux, se hai caratteri .ttf, molto probabilmente hai anche fontconfig , che viene fornito con l' fc.scanutilità. È possibile analizzare l'output per le informazioni desiderate o utilizzare l' --formatopzione mal documentata .

Per esempio:

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

Le proprietà del carattere che è possibile stampare in questo modo sono mostrate qui: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Alcune proprietà sono elencate in più lingue. Ad esempio, %{fullname}potrebbe essere un elenco. In tal caso, %{fullnamelang}elencherà le lingue. Se questo ti mostra la tua lingua in quarta posizione nell'elenco, puoi usare %{fullname[3]}come stringa di formato per stampare il nome completo solo in quella lingua.

Dato che questa lingua è piuttosto scomoda, ho finito per scrivere uno script Perl completo per elencare le informazioni che volevo in una sola lingua:

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

Fantastico, grazie per il suggerimento (e lo script .. anche se non ho ancora testato lo script). Sai se esiste un modo per ottenere anche informazioni sulla licenza / sul copyright? Ho provato% {licenza},% {copyright} e nessun formato, ma nessuno di questi ha prodotto nulla, mentre fontforge è in grado di mostrarmelo.
pazzo

In effetti, fc-scan non sembra mostrare il copyright. foundryè il più vicino che ti dà. Ma otfinfo -i, suggerito da CJM, lo mostra.
mivk

Ah fantastico, ho installato lcdf-typetoolsed eseguito otfinfo -icome suggerito e questo ha funzionato, grazie! (E ho dato a @cjm anche un +1).
pazzo

fc-scan è ottimo per ottenere il carattere "nome completo" che viene utilizzato per fare riferimento al carattere nei programmi.
mpr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.