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
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.
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.
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