Fonttabelle mit Matplotlib zeichnen

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Matplotlib ist eine beliebte Datenvisualisierungsbibliothek in Python. Es bietet Schriftzeichenunterstützung über die FreeType-Bibliothek. In diesem Lab werden wir lernen, wie man eine Schriftzeichentabelle der ersten 255 Zeichen einer gegebenen Schrift mit Hilfe von Axes.table von Matplotlib zeichnet.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Drucken von Glyphen in einer Schrift

In diesem Schritt werden wir eine Funktion print_glyphs definieren, die alle Glyphen in einer gegebenen Schriftdatei auf die Standardeingabe ausgibt.

import os
import unicodedata
import matplotlib.font_manager as fm
from matplotlib.ft2font import FT2Font

def print_glyphs(path):
    """
    Druckt alle Glyphen in der gegebenen Schriftdatei auf die Standardeingabe aus.

    Parameter
    ----------
    path : str oder None
        Der Pfad zur Schriftdatei. Wenn None, wird die Standardschrift von Matplotlib verwendet.
    """
    if path is None:
        path = fm.findfont(fm.FontProperties())  ## Die Standardschrift.

    font = FT2Font(path)

    charmap = font.get_charmap()
    max_indices_len = len(str(max(charmap.values())))

    print("Die Schriftart enthält die folgenden Glyphen:")
    for char_code, glyph_index in charmap.items():
        char = chr(char_code)
        name = unicodedata.name(
                char,
                f"{char_code:#x} ({font.get_glyph_name(glyph_index)})")
        print(f"{glyph_index:>{max_indices_len}} {char} {name}")

Zeichnen einer Schrifttabelle

In diesem Schritt werden wir eine Funktion draw_font_table definieren, die eine Schrifttabelle der ersten 255 Zeichen der gegebenen Schrift zeichnet.

import os
from pathlib import Path
import unicodedata
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from matplotlib.ft2font import FT2Font

def draw_font_table(path):
    """
    Zeichnet eine Schrifttabelle der ersten 255 Zeichen der gegebenen Schrift.

    Parameter
    ----------
    path : str oder None
        Der Pfad zur Schriftdatei. Wenn None, wird die Standardschrift von Matplotlib verwendet.
    """
    if path is None:
        path = fm.findfont(fm.FontProperties())  ## Die Standardschrift.

    font = FT2Font(path)

    ## Holt die Zeichenkarte der Schrift
    codes = font.get_charmap().items()

    ## Erstellt die Labels und Zellen der Tabelle
    labelc = [f"{i:X}" for i in range(16)]
    labelr = [f"{i:02X}" for i in range(0, 16*16, 16)]
    chars = [["" for c in range(16)] for r in range(16)]

    for char_code, glyph_index in codes:
        if char_code >= 256:
            continue
        row, col = divmod(char_code, 16)
        chars[row][col] = chr(char_code)

    ## Zeichnet die Tabelle mit Hilfe von Matplotlib's Axes.table
    fig, ax = plt.subplots(figsize=(8, 4))
    ax.set_title(os.path.basename(path))
    ax.set_axis_off()

    table = ax.table(
        cellText=chars,
        rowLabels=labelr,
        colLabels=labelc,
        rowColours=["palegreen"] * 16,
        colColours=["palegreen"] * 16,
        cellColours=[[".95" for c in range(16)] for r in range(16)],
        cellLoc='center',
        loc='upper left',
    )

    ## Setzt die Schrift der Tabellenzellen auf die Schrift des gegebenen Pfads
    for key, cell in table.get_celld().items():
        row, col = key
        if row > 0 and col > -1:  ## Achten Sie auf die eigenartige Indizierung der Tabelle...
            cell.set_text_props(font=Path(path))

    fig.tight_layout()
    plt.show()

Zeige die Schrifttabelle an

In diesem Schritt werden wir argparse verwenden, um den Pfad zur Schriftdatei aus den Befehlszeilenargumenten zu analysieren. Anschließend werden wir print_glyphs aufrufen, um alle Glyphen in der Schriftdatei auszugeben, und draw_font_table, um die Schrifttabelle der ersten 255 Zeichen der Schrift zu zeichnen.

if __name__ == "__main__":
    from argparse import ArgumentParser

    parser = ArgumentParser(description="Zeige eine Schrifttabelle an.")
    parser.add_argument("path", nargs="?", help="Pfad zur Schriftdatei.")
    parser.add_argument("--print-all", action="store_true",
                        help="Optional: Drucke alle Zeichen auf die Standardeingabe aus.")
    args = parser.parse_args()

    if args.print_all:
        print_glyphs(args.path)
    draw_font_table(args.path)

Zusammenfassung

In diesem Lab haben wir gelernt, wie man eine Schrifttabelle der ersten 255 Zeichen einer Schriftdatei mit Hilfe von Axes.table von Matplotlib zeichnet. Wir haben Funktionen definiert, um alle Glyphen in einer Schriftdatei auszugeben und die Schrifttabelle zu zeichnen. Wir haben auch argparse verwendet, um den Pfad zur Schriftdatei aus den Befehlszeilenargumenten zu analysieren.