Python e Fontforge

Già disegnare font non è un’attività molto popolare. Figuriamoci automatizzare alcune operazioni. Non ho trovato sul web in evidenza nessun tutorial su come usare Python dentro Fontforge. Però la possibilità c’è. Innanzitutto, appena installato Fontforge, non è possibile lavorare da una normale linea di comando scrivendo semplicemente “import fontforge”. Almeno in Windows, usando il normale interprete di Python che si usa di solito.
Però si può andare in un apposito prompt installato di default con FontForge che si trova nella cartella in cui è stato installato il programma. Nel mio caso C:/Programmi(x86)/FontForgeBuilds. Qui si trova un file chiamato fontforge-console.bat, che aperto si comporta come un normale prompt. A parte il fatto che nelle prime righe informa che ha configurato il system path per aggiungere fontforge così che quest'ultimo possa essere avviato dalla console. “Puoi anche usare la distribuzione di Python collegata chiamando ‘ffpython’”, dice la terza riga. La quarta spiega che tramite ffpython si possono installare moduli aggiuntivi.
A quel punto basta digitare ffpython per avviare l’interprete.
Scrivendo import fontforge si importa il modulo.
Per aprire un file si scrive: fontforge.open(“nomeDelFile.otf”). Il nome del file ovviamente deve essere quello di un file esistente, completo di percorso per arrivarci, dato per scontato che non si trova nella cartella in cui c’è la console. Il risultato lo attribuiamo a una variabile m.
L’interprete risponde col nome del font e con varie righe sulle tabelle ignorate e quelle che possono creare problemi.
Se adesso scriviamo
m.selection.select((“ranges”, None), “A”, “M”)
stiamo selezionando tutte le maiuscole dalla A alla M.
Con
m.copy()
le copiamo negli appunti.
Con
n=fontforge.font()
stiamo creando un nuovo font vuoto.
Ripetendo l’operazione selection con gli stessi parametri di prima, ma su n anziché su m selezioniamo le caselle dove incollare le forme che abbiamo copiato.
Con
n.paste()
incolliamo in queste caselle il contenuto degli appunti.
Se vogliamo vedere l’elenco dei punti che compongono la A, possiamo scrivere:
print n[“A”].foreground
Bastano altre due righe:
n.fontname=”NewFont”
n.save(“NewFont.sfd”)

per salvare il progetto con le lettere copiate in un nuovo file.
Il listato completo del programma appena eseguito è tratto da questo sito, dove è stato intitolato “Stupid example”. E, nonostante l’insulto, è l’ideale per uno che si avvicina per la prima volta alla programmazione in FontForge (dando per scontato che sappia già usare Python).
Ma la stessa pagina contiene molto più di uno “stupido esempio”: contiene tutti gli attributi e i metodi del modulo fontforge, con elenco dei parametri e spiegazione di come vanno utilizzati.
Così al volo mi viene in mente che voglio sapere quanto è larga la A e quanto la B e qual’è la loro differenza.
Scrivo
print n[“A”].width
e ottengo
531
(le forme che ho copiato in n sono tratte da un font qualsiasi che avevo sottomano); scrivo
print n[“B”].width
e ottengo
570;
scrivo
print n[“A”].width-n[“B”].width
e ottengo
-39
(la B è più larga della A di 39 unità).
In teoria ciò che si può fare a mano si può automatizzare: riconosco autoTrace, autoHint, addExtrema e tante altre opzioni familiari.
Ci sono i vari intersect, remove lap ed exclude, e c’è anche l’import, che inserisce un’immagine sullo sfondo di un glifo.
Mi torna in mente una mia vecchia idea, già sfruttata da qualcuno sul web: farsi mandare dal cliente un modulo compilato con le varie lettere dell’alfabeto tracciate a mano e trarne un font.
Se le dimensioni di ogni casella sono fisse, è facile scomporre il tutto in automatico. Potendo inserire queste altre istruzioni in uno script, si potrebbe caricare ciascuna delle immagini nella posizione corretta, eseguire l’autotrace e le varie operazioni di semplificazione e controllo degli estremi, levandosi dai piedi la parte più noiosa del lavoro e concentrandosi solo sul kerning e sugli inghippi che di solito si creano in questi casi (punti che si sovrappongono e altre cose che non si risolvono in automatico).
Resta soltanto una vaga idea, ma intanto so che non sarebbe difficile da fare. Almeno in teoria.

Commenti

Post più popolari