查看 Linux 中给定字体的字形数量

查看 Linux 中给定字体的字形数量

对于给定的ttf字体otf,如何获取元信息?诸如使用了多少个字形、使用了什么工具、我们拥有哪个版本的字体、其标签等信息?对于 Windows 机器,我已经看到了此工具。但是对于 Ubuntu/Linux,我找不到任何!

答案1

这是一个你可以使用的简单解决方案。你需要 Perl 和libfont-ttf-perlDebian 的软件包(或者字体::TTF来自 CPAN):


#!/usr/bin/perl
use strict;
use warnings;
    
use Font::TTF::Font;
    
unless (defined $ARGV[0]) {
    die <<~'EOT';
        perl glyphs_counter.pl infontfile.otf
        Prints glyph count for each input TTF file
        EOT
}

foreach (@ARGV) {
    my $f = Font::TTF::Font->open($_) || die "Unable to open font file $_";
    my $num = $f->{'maxp'}{'numGlyphs'};
    printf "%6d  %s\n", $num, $_;
    $f->release;
}

您唯一需要做的就是将此脚本保存到文件中,通过 Perl 调用它并将要计算字形的字体的路径作为参数:

$ perl glyphs_counter.pl /path/to/the/foo_font.ttf

它似乎适用于 TTF 和 OTF 格式。希望对您有所帮助。

2022 编辑:删除了指向我从中复制此解决方案的原始脚本的链接,因为该链接已损坏,并且我找不到它的存档。

答案2

源自https://stackoverflow.com/a/66788946/3585790

#!/bin/bash
[[ -f "$1" ]] && fc='fc-query' || fc='fc-match'

for range in $($fc --format='%{charset}\n' "$1"); do
    for n in $(seq "0x${range%-*}" "0x${range#*-}"); do
        printf "\n"
    done
done | wc -l

可能您不需要安装任何东西。

你可以像这样使用它:

$ count-glyphs /usr/share/fonts/noto/NotoColorEmoji.ttf
1485
$ count-glyphs "Noto Color Emoji"
1485

答案3

charset这是一个处理一些工具输出的python脚本fc-*

# Usage:
# fc-match --format '%{charset}\n' FONT_NAME | python3 count-charset.py
# fc-query --format '%{charset}\n' FONT_FILE | python3 count-charset.py

import sys

def count_range(expr: str) -> int:
    if '-' in expr:
        (a, b) = expr.split('-')
        return int(b, base=16) - int(a, base=16) + 1
    return 1

for line in sys.stdin:
    print(sum(count_range(expr) for expr in line.strip().split()))

例子:

$ fc-match --format '%{charset}\n' 'GoMono Nerd Font' | python3 count-charset.py
11786

$ fc-query --format '%{charset}\n' /usr/share/fonts/gnu-free/FreeMono.otf | python3 count-charset.py
4160

相关内容