Чи є інструмент командного рядка Unix, який може аналізувати файли шрифтів?


32

Враховуючи каталог файлів шрифтів (TTF та OTF), я хотів би ознайомитись із кожним шрифтом та визначити, який стиль (регулярний, курсивний, жирний, напівжирний). Чи є інструмент командного рядка для операційних систем з ароматизованою функцією unix, який може це зробити? Або хтось знає, як витягнути метадані з файлу шрифту TTF або OTF?

Відповіді:


30

Я думаю, ти шукаєш otfinfo . Там , здається, не буде варіант , щоб отримати на підродини безпосередньо, але ви можете зробити:

otfinfo --info *.ttf | grep Subfamily

Зауважте, що ряд шрифтів, які я переглянув, використовують "Oblique" замість "Italic".


10
Ідеально, дякую! Для тих, хто цікавиться, я перебуваю на OS X і встановив його через brew withbrew install lcdf-typetools
kreek

FWIW, пакет MacPorts також називається lcdf-typetools(і є залежністю texlive-fontutils, тому він вже може бути встановлений для людей, які використовують TeX).
hans_meine

15

У Linux, якщо у вас є шрифти .ttf, ви, ймовірно, також маєте fontconfig , який поставляється з fc.scanутилітою. Ви можете проаналізувати висновок потрібної інформації або скористатися погано задокументованою --formatопцією.

Наприклад:

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

Властивості шрифту, які ви можете надрукувати таким чином, показані тут: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Деякі властивості перелічені на кількох мовах. Наприклад, %{fullname}може бути список. У такому випадку %{fullnamelang}буде перераховано мови. Якщо це показує вам вашу мову на четвертому місці у списку, ви можете використовувати %{fullname[3]}як рядок формату для друку повного імені лише на цій мові.

Ця мовна мова була досить незручною, я закінчив писати повний сценарій Perl, щоб перелічити інформацію, яку я хотів, лише однією мовою:

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

Дивовижний, дякую за підказку (і сценарій .. хоча сценарій ще не перевірив). Чи знаєте ви, чи є спосіб отримати також інформацію про ліцензію / авторські права? Я спробував% {licence},% {copyright} і жодного формату, але жоден із них нічого не дав, тоді як fontforge може мені це показати.
божевільний

Дійсно, fc-сканування, схоже, не демонструє авторських прав. foundry- це найближче, що дає тобі. Але otfinfo -i, запропонований cjm, відображає це.
mivk

Ах це чудово, я встановив lcdf-typetoolsі запустив, otfinfo -iяк було запропоновано, і це зробив трюк, спасибі! (І я також дав @cjm +1).
божевільний

fc-scan відмінно підходить для отримання шрифту "fullname", який використовується для посилання на шрифт у програмах.
MPR
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.