Ich habe eine Schriftart namens M + A1 basierend auf M + FONTS in Python erstellt. (https://microraptor.booth.pm/items/2347968) Ich werde das Verfahren zum programmgesteuerten Lesen und Schreiben von Schriften mit der Bedeutung von Memorandum und Missionsarbeit erläutern.
Da es nicht möglich ist, OTF (Open Type) plötzlich zu lesen, schreiben Sie es im UFO-Format (Unified Font Object) und lesen Sie dann die Datei, um OTF zu erstellen.
Was ist UFO? Es wird sein, aber es ist nicht schwierig. Es ist nur eine XML-Datei. Die Kontrollpunkte der Bezier-Kurven, aus denen die Schriftdaten bestehen, werden als XML exportiert.
OTF -> UFO Erstellen Sie mit defcon ein Font-Objekt und exportieren Sie es mit extractUFO nach OTF-> UFO.
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)
Der Export kann für westliche Sprachen in wenigen Sekunden und für japanische Schriftarten in wenigen Minuten erfolgen.
lib.plist und content.plist sind ähnliche Dateien, sodass Sie auf eine der beiden Dateien verweisen können. (In Lib.plist sind kein Schriftartname und keine Schriftartdatei verknüpft, aber der Schriftartname wird auch in jede .gilf geschrieben. Contents.plist ist in einer großen Anzahl von .gilf vorhanden, daher ist es schwierig, ihn zu finden. Ich denke es ist egal welches.)
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()
#Wählen Sie das zu bearbeitende Zeichen aus
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')
#Aus der Glif-Datei<contour>Untergeordnet<point>Tags nacheinander lesen
for tag_contour in contour_list:
contour = defcon.Contour()
point_list = tag_contour.findall('./point')
for k, v in enumerate(point_list):
# <point>Keine, wenn Typ nicht in definiert ist
_type = v.attrib['type'] if 'type' in v.attrib else None
#Sollwerte
contour.appendPoint(
defcon.Point(
(int(v.attrib['x']), int(v.attrib['y'])),
segmentType=_type,
)
)
#Stellen Sie die Kontur für eine Runde ein
glyph.appendContour(contour)
#Export nach OTF
otf = ufo2ft.compileOTF(font)
otf.save('new_font.otf')
Dadurch wird eine Schriftartdatei mit nur "a" ausgegeben. Sie können Ihre eigene Schriftart erstellen, indem Sie den Pfad bearbeiten und dann schreiben.
UFO-Beamter: 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