글꼴 파일을 분석 할 수있는 유닉스 명령 줄 도구가 있습니까?


32

글꼴 파일 (TTF 및 OTF) 디렉토리가 주어지면 각 글꼴을 검사하고 어떤 스타일 (일반, 기울임 꼴, 굵게, 굵은 글꼴)인지 확인하고 싶습니다. 이 작업을 수행 할 수있는 유닉스 운영 체제 용 명령 줄 도구가 있습니까? 아니면 TTF 또는 OTF 글꼴 파일에서 메타 데이터를 추출하는 방법을 아는 사람이 있습니까?

답변:


30

나는 당신이 otfinfo를 찾고 있다고 생각합니다 . 서브 패밀리에 직접 갈 수 있는 옵션 은 없지만 다음과 같이 할 수 있습니다.

otfinfo --info *.ttf | grep Subfamily

내가 본 많은 글꼴은 "Italic"대신 "Oblique"를 사용합니다.


10
고마워요! 관심있는 분들을 위해 저는 OS X를 사용하고 있습니다.brew install lcdf-typetools
kreek

FWIW, MacPorts 패키지라고도합니다 lcdf-typetools(의 의존성 texlive-fontutils이므로 TeX를 사용하는 사람들을 위해 이미 설치되어있을 수 있습니다).
hans_meine

15

Linux에서 .ttf 글꼴이있는 경우 대부분 유틸리티 와 함께 제공되는 fontconfigfc.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";

놀랍게도 팁에 감사드립니다 (그리고 스크립트는 아직 테스트하지는 않았지만). 라이센스 / 저작권 정보를 얻는 방법이 있는지 알고 있습니까? fontforge가 나에게 보여줄 수는 있지만 % {license}, % {copyright}를 시도했지만 형식은 없었지만 아무것도 생성하지 못했습니다.
insaner

실제로 fc-scan은 저작권을 보여주지 않는 것 같습니다. foundry그것이 당신에게 가장 가까운 것입니다. 그러나 otfinfo -icjm에서 제안한대로 표시합니다.
mivk

아 대단하다, 나는 제안대로 설치 lcdf-typetools하고 달렸다 otfinfo -i. (그리고 @cjm에게 +1도주었습니다).
insaner

fc-scan은 프로그램에서 글꼴을 참조하는 데 사용되는 "fullname"글꼴을 얻는 데 유용합니다.
mpr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.