Apakah ada alat baris perintah unix yang dapat menganalisis file font?

32

Diberikan direktori file font (TTF dan OTF) Saya ingin memeriksa setiap font dan menentukan gaya apa (reguler, miring, tebal, tebal-miring) itu. Apakah ada alat baris perintah untuk sistem operasi beraroma unix yang dapat melakukan ini? Atau apakah ada yang tahu cara mengekstrak metadata dari file font TTF atau OTF?

kreek
sumber

Jawaban:

30

Saya pikir Anda sedang mencari otfinfo . Tampaknya tidak ada opsi untuk langsung masuk ke Subfamili, tetapi Anda bisa melakukannya:

otfinfo --info *.ttf | grep Subfamily

Perhatikan bahwa sejumlah font yang saya lihat menggunakan "Oblique", bukan "Italic".

cjm
sumber
10
Sempurna terima kasih! Bagi yang tertarik, saya menggunakan OS X dan memasangnya via bir denganbrew install lcdf-typetools
kreek
FWIW, paket MacPorts juga disebut lcdf-typetools(dan merupakan ketergantungan texlive-fontutils, jadi mungkin sudah diinstal untuk orang yang menggunakan TeX).
hans_meine
15

Di Linux, jika Anda memiliki font .ttf, kemungkinan besar Anda juga memiliki fontconfig , yang disertakan dengan fc.scanutilitas. Anda dapat mengurai output untuk informasi yang Anda inginkan, atau menggunakan --formatopsi yang tidak terdokumentasi .

Sebagai contoh:

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

Properti font yang dapat Anda cetak dengan cara ini ditunjukkan di sini: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Beberapa properti terdaftar dalam berbagai bahasa. Misalnya, %{fullname}mungkin daftar. Dalam hal ini, %{fullnamelang}akan mencantumkan bahasa. Jika itu menunjukkan bahasa Anda di posisi keempat dalam daftar, Anda dapat menggunakan %{fullname[3]}string format untuk mencetak nama lengkap hanya dalam bahasa itu.

Hal-hal bahasa ini menjadi sangat tidak nyaman, saya akhirnya menulis skrip Perl lengkap untuk mencantumkan info yang saya inginkan hanya dalam satu bahasa:

#!/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
sumber
Luar biasa, terima kasih atas tipnya (dan skrip .. meskipun saya belum menguji skripnya). Apakah Anda tahu apakah ada cara untuk mendapatkan informasi lisensi / hak cipta juga? Saya mencoba% {lisensi},% {hak cipta} dan tidak ada format, tetapi tidak ada yang menghasilkan apa pun, sedangkan fontforge dapat menunjukkannya kepada saya.
insaner
Memang, fc-scan sepertinya tidak menunjukkan hak cipta. foundryadalah yang paling dekat memberi Anda. Tapi otfinfo -i, disarankan oleh cjm, tidak menampilkannya.
mivk
Ah itu hebat, saya menginstal lcdf-typetoolsdan menjalankan otfinfo -iseperti yang disarankan dan itu berhasil, terima kasih! (Dan saya memberi @cjm +1 juga).
insaner
fc-scan sangat bagus untuk mendapatkan font "nama lengkap" yang digunakan untuk referensi font dalam program.
mpr