Existe uma ferramenta de linha de comando unix que possa analisar arquivos de fontes?

22

Dado um diretório de arquivos de fontes (TTF e OTF) eu gostaria de inspecionar cada fonte e determinar qual estilo (regular, itálico, negrito, negrito-itálico) é. Existe uma ferramenta de linha de comando para sistemas operacionais com sabor unix que pode fazer isso? Ou alguém sabe como extrair os metadados de um arquivo de fonte TTF ou OTF?

    
por kreek 04.12.2011 / 22:55

2 respostas

22

Acho que você está procurando otfinfo . Não parece haver uma opção para chegar diretamente à Subfamília, mas você poderia:

otfinfo --info *.ttf | grep Subfamily

Observe que várias fontes que eu usei usam "Oblique" em vez de "Itálico".

    
por 05.12.2011 / 00:38
13

No Linux, se você tem fontes .ttf, provavelmente também tem fontconfig , que vem com o utilitário fc.scan . Você pode analisar a saída para as informações desejadas ou usar a opção --format mal documentada.

Por exemplo:

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

As propriedades das fontes que você pode imprimir desta forma são mostradas aqui: link

Algumas propriedades estão listadas em vários idiomas. Por exemplo, %{fullname} pode ser uma lista. Nesse caso, %{fullnamelang} listará os idiomas. Se isso mostrar seu idioma na quarta posição da lista, você poderá usar %{fullname[3]} como a string de formato para imprimir o nome completo apenas nesse idioma.

Esse material de linguagem é bem inconveniente, acabei escrevendo um script Perl completo para listar as informações que eu queria em apenas um 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";
    
por 29.05.2014 / 17:44