Automatisch letters herschrijven (update)

Het is gelukt. Uiteindelijk alle MacPython-versies van de harde schijf af gegooid en opnieuw begonnen met een zo goed als schoon systeem. Ik vind het wel bizar dat Python ondertussen bezig is met versie 3.0 en dat MacOS X standaard met versie 2.5.1 geleverd wordt. Tsja, het zij zo. Ik heb trouwens eerst nog iets anders met het handschrift gedaan. Zoals ik al zei, waren niet alle letters in de juiste verhoudingen geschreven. In een tekenprogramma de glyphs schalen betekent automatisch een verandering in dik-dun-verschil. Om een gelijkmatige “pen”te simuleren, heb ik al letters opnieuw nagemaakt, maar dan met een enkele lijn als uitgangspunt. Door de letters als een enkele streek te tekenen, kun je daarna verschillende diktes, contrast-soorten of zelfs vervormingen toepassen. In FontForge kun je zgn. Stroke Fonts tekenen en dat geeft je een aardige basis voor welke variant dan ook. Ter info: De filosofie van Martin Majoor.

Na dit tekenavontuur heb ik alle robofab-requirements weer opnieuw geïnstalleerd en continue gekeken of het wel allemaal werkte… De tests doorlopen, “import robofab.world”, “import fonttools”, enz. Geen foutmeldingen betkent: goed zo, ga zo door.

In de MacPython-versies wordt automatisch IDLE meegeleverd. Ik vond het wel makkelijk dat je direct je PYTHONPATH kon doorbladeren en het juiste bestand kon openen. Maar dankzij Editra werd het voor mij ook mogelijk om een beetje sneller door de materie heen te gaan. Editra is ook voorzien van een Python-interpreter (zeg ik dat goed?) waardoor je direct met F5 je code kunt laten uitvoeren. Ik blijf het een ellende vinden om alleen getallen te bewerken en achteraf pas het resultaat te zien, maar goed…

Stel je voor dat je dus steeds een beetje code schrijft en aanpast. In het geval van de rough-edges gaat het om kleine stapjes die een rafelig randje maken, waardoor de letters van het handschrift een beetje gaan leven. Je verandert dus een bepaalde factor, voert het script uit en moet dan gaan kijken wat de gevolgen waren. Jammergenoeg zijn er voor UFO’s geen standaard-viewers. Een UFO is ook niets meer dan een map met glyphs. Ik werkte met Area 51, maar die is vanmiddag ook gestopt met doen waar hij voor bedoeld was. Van het ene op het andere moment wilde het programma geen glyph meer laten zien en kon ik alleen nog maar zwaaien naar de UFO’s. Vervelend als het eigenlijk het enige programma is waar je de glyphs mee kunt bekijken…

Hoewel…

Gelukkig is er FontForge. Dat opent ook UFO’s en is redelijk flexibel in het omgaan met rommelige randjes. FontForge kan na vandaag niet meer stuk. Ten eerste opent het zo’n beetje elk gewenst en ongewenst font-formaat dat er bestaat. Ten tweede werkt het op zo’n beetje alle “bekende” besturingssystemen en ten derde kun je met FontForge je letters opslaan in zo’n beetje elk gewenst formaat. Daarnaast is een FontForge-bestand (sfd) ook gewoon leesbaar voor mensen. Dus nadat ik uiteindelijk de gewenste vervorming kon toepassen, liet ik het resultaat thuis zien. Hun reactie?

Hoelang ben je daar nou mee bezig geweest?

schrift_rough

Te lang misschien, maar een mens mag ook een passie hebben. De mogelijkheden van RoboFab, Python en FontForge zijn voorlopig nog niet uitgeput. Met dank aan Erik en Tal voor hun geduld.

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.