Как узнать, какой шрифт может отображать эти символы? - PullRequest
1 голос
/ 02 февраля 2020
⚫⚪
Unicode U+26AB
Unicode U+26AA

enter image description here

Эти два символа могут отображаться в терминале, я хочу использовать convert (команда imagemagick) для преобразования этого текста в изображение.

Но convert может использовать только один специальный шрифт , нельзя использовать резервный шрифт.

convert -list font

Итак Как я могу найти, какой шрифт может отображать эти символы?

1 Ответ

1 голос
/ 04 февраля 2020

Я адаптировал код в этом ответе , чтобы создать скрипт для поиска того, какой шрифт содержит определенный символ, следующим образом:

#!/usr/bin/env python3

import os, sys
import unicodedata
from fontTools.ttLib import TTFont
from sys import platform

def char_in_font(unicode_char, font):
    for cmap in font['cmap'].tables:
        if cmap.isUnicode():
            if ord(unicode_char) in cmap.cmap:
                return True
    return False

def test(char):
    for fontpath in fonts:
        font = TTFont(fontpath)   # specify the path to the font in question
        if char_in_font(char, font):
            print(char + " "+ unicodedata.name(char) + " in " + fontpath)

if __name__ == '__main__':

    if platform == "linux":
        likelyPlaces = ['/usr/share/fonts', '/usr/local/share/fonts', '~/.fonts']
    elif platform == "darwin":
        likelyPlaces = ['/System/Library/Fonts', '/Library/Fonts', '~/Library/Fonts']
    elif platform == "win32":
        likelyPlaces = ['WHO KNOWS']

    fonts = []
    for place in likelyPlaces:
        for root,dirs,files in os.walk(os.path.expanduser(place)):
            for file in files:
               if file.endswith(".ttf"): fonts.append(os.path.join(root,file))

    # Check user has specified a character
    if len(sys.argv) != 2:
        sys.exit("Usage: findfont.py glyph")

    test(sys.argv[1])

Итак, теперь я могу назвать его следующим образом чтобы найти шрифт, содержащий ваши два круга:

enter image description here

...