Modifier les polices en Python

introduction

J'ai créé une police appelée M + A1 basée sur M + FONTS en Python. (https://microraptor.booth.pm/items/2347968) J'expliquerai la procédure pour lire et écrire des polices par programme avec le sens du mémorandum et du travail missionnaire.

--Mon environnement

Chose que tu veux faire

Comme il n'est pas possible de lire soudainement OTF (Open Type), écrivez-le au format UFO (Unified Font Object) puis lisez le fichier pour créer OTF.

Qu'est-ce que l'OVNI? Ce sera le cas, mais ce n'est pas difficile. C'est juste un fichier xml. Les points de contrôle des courbes de Bézier qui composent les données de police sont exportés au format xml.

OTF -> UFO Créez un objet Font avec defcon et exportez-le vers OTF-> UFO avec extractUFO.


import defcon
import extractor

IMPORT_FILE = r'C:\example\abc.otf'
EXPORT_FILE = r'C:\example\abc_ufo'
font = defcon.Font()
extractor.extractUFO(IMPORT_FILE, font)
font.save(EXPORT_FILE)

Les exportations peuvent être effectuées en quelques secondes pour les langues occidentales et en quelques minutes pour les polices japonaises.

Résultat de sortie

lib.plist et contents.plist sont des fichiers similaires, vous pouvez donc vous référer à l'un ou l'autre. (Lib.plist n'a pas de nom de police et de fichier de police associés, mais le nom de police est également écrit dans chaque .gilf. Contents.plist existe dans un grand nombre de .gilf, il est donc difficile de le trouver. Je pense que peu importe lequel.)

UFO -> OTF

import os
import defcon
import ufo2ft
from xml.etree import ElementTree as ET

# Const
UFO_FILE = r'C:\example\abc_ufo'
GLIF_PATH = os.path.join(UFO_FILE, 'glyphs')

font = defcon.Font()

#Sélectionnez le personnage à modifier
glif_root = ET.parse(os.path.join(GLIF_PATH, 'a.glif'))
glyph = font.newGlyph('a')
glyph.unicode = int(glif_root.find('.//unicode').attrib['hex'], 16)
contour_list = glif_root.findall('.//contour')

#À partir du fichier glif<contour>Subalterne<point>Lire les balises séquentiellement
for tag_contour in contour_list:
    contour = defcon.Contour()
    point_list = tag_contour.findall('./point')

    for k, v in enumerate(point_list):
        # <point>Aucun si le type n'est pas défini dans
        _type = v.attrib['type'] if 'type' in v.attrib else None
        #Définir des points
        contour.appendPoint(
            defcon.Point(
                (int(v.attrib['x']), int(v.attrib['y'])),
                segmentType=_type,
            )
        )
    #Définir le contour pour un tour
    glyph.appendContour(contour)

#Exporter vers OTF
otf = ufo2ft.compileOTF(font)
otf.save('new_font.otf')

Cela produira un fichier de police avec seulement "un" ensemble. Vous pouvez créer votre propre police en manipulant le chemin puis en écrivant.

Matériel de référence / référence

Officiel UFO: https://unifiedfontobject.org/ DEFCON : https://defcon.robotools.dev/en/latest/ https://qiita.com/irori/items/5518c242e0244838783b https://blog.hgrs.me/20190806022544 https://irori.github.io/wapuro-mincho/

Recommended Posts

Modifier les polices en Python
Quadtree en Python --2
Python en optimisation
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 18 en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Décomposition LU en Python