MicroPython - Générateur de font FreeType-Generator et FontDrawer

Ce week-end fût l'occasion de se pencher sur le projet MicroPython "FreeType Generator" permettant de générer des fichiers de fonts pour MicroContrôleur... ainsi que FontDrawer permettant d'exploiter les font sous MicroPython

ft-generator.py

Le script ft-generator.py pour Python 3 permet transforme une font TrueType en fichier binaire compacte qui pourra être exploité sur une plateforme MicroPython.
Le projet inclus déjà plusieurs fichiers binaires prêt à l'emploi.

La partie la plus intéressante du projet c'est FontDrawer

FontDrawer

FontDrawer (sous projet) est une classe MicroPython qui exploite un fichier de font binaire pour dessiner des chaînes de caractères sur un écran TFT / LCD.

FontDrawer dessines les caractères dans un FrameBuffer... il est donc compatible avec la plupart des afficheurs puisque MicroPython recommande de dériver les pilotes d'écran graphique de la classe FrameBuffer.

Le code d'exemple ci-dessous utilisant un écran OLED 128*4 démontre à quel point il est simple de charger la font d'écrire du texte dans le FrameBuffer.

from machine import I2C
from SSD1306 import SSD1306_I2C
from fdrawer import FontDrawer


i2c = I2C( 1, freq=2000000 )
lcd = SSD1306_I2C( width=128, height=64, i2c=i2c, addr=0x3c, external_vcc=True )

lcd.rect( 0, 0, 128, 64, 1 )
lcd.show()

fd = FontDrawer( frame_buffer=lcd, font_name = 'vera_m15' )
fd.print_str( "Font Demo", 2, 2 )
fd.print_char( "#", 100, 2 )
fd.print_str( fd.font_name, 2, 18 )
lcd.show()

Ce qui produit le résultat suivant:

Source: FreeType Generator
 

Lorsque le FontDrawer est instancié, il est nécessaire de lui passer le FrameBuffer de l'afficheur en paramètre AINSI que le nom du fichier de Font à charger depuis le système de fichier.

Le fichier de Font, vera_m15.bin, est ouvert pour en extraire les données utiles et les charger en mémoire. Charger les données binaires évite la coûteuse phase de parsing d'un script python (par exemple, lorsque la Font est définie sous forme de données dans un script python). 

Note: les développements doivent encore avancer, ne fut-ce que pour dessiner correctement les espaces dans le texte (pas grand chose, ce sera vite fait).

Documentation

Le projet est, pour l'instant, documenté en anglais dans le dépôt GitHub.
Il est accompagné d'exemples, description technique, photo d'exemple et autre information utiles. 

Bonne découvertes
Dominique

Aucun commentaire