Automatisch letters herschrijven

Voor een opdracht heb ik toegezegd een handschrift te digitaliseren.Mijn opdrachtgever heeft het hele alfabet in onderkast en KAPITALEN opgeschreven en daarnaast ook nog de cijfers en een groot aantal speciale tekens.
Met behulp van Adobe Illustrator, TypeTool en FontForge heb ik er een redelijk gelijkend handschrift van kunnen maken. Er moet nog heel wat gebeuren op het gebied van “kerning”, maar dat gaat wel lukken.
Tijdens het “opruimen” van de contouren ben ik nogal drastisch te werk gegaan en zijn de “glyphs” allemaal net iets te glad geworden. Het voelt niet echt lekker… Overigens is het lettertype nog niet af. Doordat de letters steeds los zijn aangeleverd, verschillen ze onderling sterk van grootte. Als ze worden vergroot, worden ze ook dikker, waardoor het beeld niet meer klopt.

allesOm dat te herstellen wil ik graag gebruik maken van scripts. Sinds de avonturen van Letterror in de jaren eind jaren ’80 en de ontwikkelingen op het gebied van letterontwerp en fontscripting sindsdien, zouden het niet al te moeilijk moeten maken.
De OpenSource middelen zijn er: RoboFab, TTX/fontTools, FontForge, etc. Er is ook veel documentatie en ondersteuning te vinden. In de http://groups.google.com/group/robofab kun je alle vragen kwijt en je krijgt vrij direct antwoord. Op de site van RoboFab staan links naar de video’s van RoboThon2009, waarin over deze thema’s uitgebreid verteld wordt. Een van de voorbeelden uit een presentatie van Just van Rossum, heb ik nagemaakt en, wat denk je? Foutmelding.

from fontTools.pens.basePen import BasePen
from fontTools.ttLib import TTFont
class DrawBotPen(BasePen):
    def _moveTo(self, pt):
        x, y = pt
        moveto(x, y)
    def _lineTo(self, pt):
        x, y = pt
        moveto(x, y)
    def _curveToOne(self, pt1, pt2, pt3):
        x1, y1 =pt1
        x2, y2 =pt2
        x3, y3 =pt3
        curveto(x1, y1,x2, y2,x3, y3)
f=TTFont(u'/Users/typovar/fontscript/MScript')
gs = f.getGlyphSet()
pen = DrawBotPen(None)
newpath()
gs["a"].draw(pen)
drawpath

Ik heb hem toen maar een mailtje gestuurd met de vraag waarom dat bij hem wel en bij mij niet lukt.
Maar het blijft een puzzel. Ondanks alle adviezen en tips blijken bij de scripts toch weer net even anders (of niet) te werken, waardoor een zichtbaar resultaat uitblijft.

In Adobe Illustrator weet ik ongeveer wat ik wil, maar dan is het geen font-bestand meer. Ik zou alle letters opnieuw moeten importeren in FontForge om er een werkend lettertype van te maken… En de enige oplossing (binnen het python-scripting-gebied) leverde een dusdanig sterke vervorming op, dat we daar maar niet verder meegaan.

Ik hoop dat ik binnenkort een antwoord krijg waar ik iets van snap. Ik ben geen letterontwerper en dat merk ik nu toch wel.

Update:

Ik heb jammergenoeg van Just van Rossum (nog) geen reactie gehad. Wel van zijn collega die kon vertellen dat zijn versie van DrawBot anders was dan de mijne. Ik kreeg ook een aantal goede suggesties om met ‘ random-roughen’ aan de gang te gaan. De UFO’s die ik met FontForge gemaakt heb, bleken echter een aantal gegevens te missen, waardoor het bestand niet in ‘Area 51’ (een andere letterprogramma) geopend kon worden. Er kwam door mijn experiment o.a. boven tafel dat ‘ Area 51’ een aantal omschrijvingen vereist, terwijl die volgens de specificaties van het UFO-bestandsformaat niet verplicht zijn. Volgens Tal Lemming zal dit in een volgende versie van het programma worden aangepast.

Erik van Blokland postte een script waarmee je “automatisch” een lettervorm kan tekenen en daarna “random-roughen” kan toepassen. Het hele vervormen van de lettercontour is eigenlijk maar 5 regels code:

# now that it is all straight sections, let's roughen it up a bit
factor = 20
for contour in g.contours:
for point in contour.points:
point.x += randint(-factor, factor)
point.y += randint(-factor, factor)

Jammergenoeg stuit ik nog op wat problemen met mijn python…

Ik heb tegen mijn kinderen gezegd dat ze, op de vraag “Wat doet jouw vader?” maar moeten antwoorden: Hij doet iets met UFO’s en een python.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.