Existe-t-il un outil en ligne de commande Unix qui peut analyser les fichiers de polices?

32

Étant donné un répertoire de fichiers de polices (TTF et OTF), j'aimerais inspecter chaque police et déterminer de quel style (normal, italique, gras, gras-italique) il s'agit. Existe-t-il un outil en ligne de commande pour les systèmes d'exploitation aromatisés Unix qui peut le faire? Ou quelqu'un sait-il comment extraire les métadonnées d'un fichier de police TTF ou OTF?

grec
la source

Réponses:

30

Je pense que vous cherchez otfinfo . Il ne semble pas être possible d'accéder directement à la sous-famille, mais vous pouvez le faire:

otfinfo --info *.ttf | grep Subfamily

Notez qu'un certain nombre de polices que j'ai examinées utilisent "Oblique" au lieu de "Italic".

cjm
la source
10
Parfait merci! Pour ceux qui sont intéressés, je suis sur OS X et je l'ai installé via brew withbrew install lcdf-typetools
kreek
FWIW, le package MacPorts est également appelé lcdf-typetools(et est une dépendance de texlive-fontutils, il peut donc déjà être installé pour les personnes utilisant TeX).
hans_meine
15

Sous Linux, si vous avez des polices .ttf, vous avez probablement aussi fontconfig , fourni avec l' fc.scanutilitaire. Vous pouvez analyser la sortie pour obtenir les informations souhaitées ou utiliser l' --formatoption mal documentée .

Par exemple:

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

Les propriétés de police que vous pouvez imprimer de cette manière sont affichées ici: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Certaines propriétés sont répertoriées dans plusieurs langues. Par exemple, %{fullname}peut être une liste. Dans ce cas, %{fullnamelang}listera les langues. Si cela vous montre votre langue en quatrième position dans la liste, vous pouvez utiliser %{fullname[3]}comme chaîne de format pour imprimer le nom complet uniquement dans cette langue.

Ce truc de langue étant assez gênant, j'ai fini par écrire un script Perl complet pour lister les informations que je voulais dans une seule langue:

#!/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
la source
Génial, merci pour l'astuce (et le script .. même si je n'ai pas encore testé le script). Savez-vous également s'il existe un moyen d'obtenir des informations sur les licences / droits d'auteur? J'ai essayé% {license},% {copyright} et aucun format, mais aucun de ceux-ci n'a rien donné, alors que fontforge est capable de me le montrer.
insaner
En effet, fc-scan ne semble pas montrer le copyright. foundryest le plus proche qu'il vous donne. Mais otfinfo -i, suggéré par cjm, l'affiche.
mivk
Ah c'est super, j'ai installé lcdf-typetoolset couru otfinfo -icomme suggéré et ça a fait l'affaire, merci! (Et j'ai également donné à @cjm un +1).
insaner
fc-scan est idéal pour obtenir la police "fullname" utilisée pour référencer la police dans les programmes.
mpr