Yazı tipi dosyalarını analiz edebilen bir unix komut satırı aracı var mı?


32

Bir yazı tipi dosyası dizini göz önüne alındığında (TTF ve OTF) Her yazı tipini incelemek ve hangi stilin (normal, italik, kalın, kalın-italik) olduğunu belirlemek istiyorum. Bunu yapabilen unix aromalı işletim sistemleri için bir komut satırı aracı var mı? Veya meta verinin TTF veya OTF font dosyasından nasıl çıkarılacağını bilen var mı?

Yanıtlar:


30

Bence otfinfoyu arıyorsun . Doğrudan Alt Aileye ulaşmak için bir seçenek yok gibi görünüyor , ancak şunları yapabilirsiniz:

otfinfo --info *.ttf | grep Subfamily

Baktığım yazı tiplerinin bir kısmının "Italik" yerine "Eğik" kullandığına dikkat edin.


10
Mükemmel teşekkürler! İlgilenenler için OS X’te bulundum ve birlikte demleme ile brew install lcdf-typetools
kurdum

FWIW, MacPorts paketi de denir lcdf-typetools(ve bir bağımlılıktır texlive-fontutils, bu yüzden zaten TeX kullanan kişiler için kurulmuş olabilir).
hans_meine

15

Linux'ta, .ttf yazı tipleriniz varsa, büyük olasılıkla yardımcı programla birlikte gelen fontconfig'iniz de vardır fc.scan. Çıktıyı istediğiniz bilgi için ayrıştırabilir veya hatalı belgelenen --formatseçeneği kullanabilirsiniz.

Örneğin:

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

Bu şekilde yazdırabileceğiniz yazı tipi özellikleri burada gösterilmektedir: http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN21

Bazı özellikler birden çok dilde listelenmiştir. Örneğin, %{fullname}bir liste olabilir. Bu durumda, %{fullnamelang}dilleri listeler. Bu, dilinizi listede dördüncü konumda gösteriyorsa %{fullname[3]}, tam adı yalnızca bu dilde yazdırmak için biçim dizesi olarak kullanabilirsiniz .

Bu dil oldukça sakıncalı, sadece bir dilde istediğim bilgiyi listelemek için tam bir Perl betiği yazdım:

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

Müthiş, bahşiş için teşekkürler (ve senaryo .. senaryoyu henüz test etmemiş olmama rağmen). Lisans / telif hakkı bilgisi almanın bir yolu olup olmadığını biliyor musunuz? % {Lisans},% {telif hakkı} ve format yok denedim, ancak hiçbiri sonuç vermedi, ancak fontforge bunu bana gösterebildi.
insan kasası

Gerçekten de, fc-scan telif hakkını göstermiyor gibi görünüyor. foundrysana verdiği en yakın şey. Ancak otfinfo -i, cjm tarafından önerilen, onu gösterir.
mivk

Ah bu harika, kurdum lcdf-typetoolsve otfinfo -iönerdiğim gibi koştum ve bu işe yaradı, teşekkürler! (Ve ben de cjm'e + 1 verdim).
delicesine

fc-scan, fontlarda programlara başvuruda bulunmak için kullanılan "fullname" fontunu almak için mükemmeldir.
mpr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.