¿Existe una herramienta de línea de comandos de Unix que pueda analizar archivos de fuentes?

32

Dado un directorio de archivos de fuentes (TTF y OTF) me gustaría inspeccionar cada fuente y determinar qué estilo (regular, cursiva, negrita, negrita-cursiva) es. ¿Existe una herramienta de línea de comandos para sistemas operativos con sabor a Unix que pueda hacer esto? ¿O alguien sabe cómo extraer los metadatos de un archivo de fuente TTF u OTF?

kreek
fuente

Respuestas:

30

Creo que estás buscando otfinfo . No parece haber una opción para llegar directamente a la Subfamilia, pero puede hacer lo siguiente:

otfinfo --info *.ttf | grep Subfamily

Tenga en cuenta que varias de las fuentes que vi usan "oblicua" en lugar de "cursiva".

cjm
fuente
10
¡Perfecto gracias! Para los interesados estoy en OS X e instalado a través de cerveza conbrew install lcdf-typetools
Kreek
FWIW, el paquete MacPorts también se llama lcdf-typetools(y es una dependencia de texlive-fontutils, por lo que ya puede estar instalado para personas que usan TeX).
hans_meine
15

En Linux, si tiene fuentes .ttf, probablemente también tenga fontconfig , que viene con la fc.scanutilidad. Puede analizar la salida de la información que desee o utilizar la --formatopción mal documentada .

Por ejemplo:

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

Las propiedades de fuente que puede imprimir de esta manera se muestran aquí: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Algunas propiedades se enumeran en varios idiomas. Por ejemplo, %{fullname}puede ser una lista. En ese caso, %{fullnamelang}enumerará los idiomas. Si eso le muestra su idioma en la cuarta posición de la lista, puede usarlo %{fullname[3]}como la cadena de formato para imprimir el nombre completo solo en ese idioma.

Debido a que este lenguaje es bastante incómodo, terminé escribiendo un script completo de Perl para enumerar la información que quería en un solo idioma:

#!/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";
mivk
fuente
Impresionante, gracias por el consejo (y el script ... aunque todavía no he probado el script). ¿Sabes si también hay una manera de obtener información de licencia / copyright? Intenté% {license},% {copyright} y ningún formato, pero ninguno de ellos arrojó nada, mientras que fontforge me lo puede mostrar.
2015
De hecho, fc-scan no parece mostrar los derechos de autor. foundryes lo más cerca que te da. Pero otfinfo -i, sugerido por cjm, lo muestra.
mivk
Ah, eso es genial, instalé lcdf-typetoolsy corrí otfinfo -icomo lo sugerí y eso funcionó, ¡gracias! (Y le di a @cjm un +1 también).
loco
fc-scan es excelente para obtener la fuente "nombre completo" que se utiliza para hacer referencia a la fuente en los programas.
mpr