Lecture d'image PBM sous MicroPython
Bonjour à tous,
Non non, ce n'est pas une faute de frappe, nous parlons bien du format PBM.
J'ai profité d'un moment de libre pour développer un BpmReader, une classe capable de lire des fichiers images aux format Portable Bit Map binaires sous MicroPython.
https://github.com/mchobby/esp8266-upy/tree/master/FILEFORMAT
Très facile à produire avec un outils comme GIMP, le format bpm est beaucoup plus compacte que le format Bitamp RGB888.
Le format PBM encode chaque pixel sur un bit là où le format BMP RGB888 nécessite 24 bits par pixel (outch!). PBM est donc un format noir et blanc... limité mais convient à tous les afficheurs LCD et OLED :-)
Produire un fichier PBM
Par exemple, il est possible de transformer ce logo MicroPython...
Conversion vers Pbm Re-converti en JPEG pour pouvoir publier l'exemple |
Qui ne fait que 2130 octets :-)
Pour produire un fichier PBM est super simple:
- Charger un fichier dans "The Gimp"
- Redimensionnez le
- Savez le en utilisant le meni "Fichier | Exporter comme..."
- Nommer le fichier avec l'extension "pbm".
- Confirmer l'enregistrement au format binaire/brute.
Pas besoin de manipuler les couleurs avec Gimp, le filtre d'exportation fait un excellent travail de tramage.
Du code pour le peuple
Le PbmReader s'accompagne de fonctions & classes utilitaires dans img.py. Ces fonctions permettent de faciliter l'ouverture open_image() , la lecture et le décodage des pixels de l'image.
Le principe d'un Reader, c'est qu'il ne charge pas les données en mémoire mais permet d'accéder aux différents pixels via des accès fichiers. Cela réduit l'empreinte mémoire mais est aussi plus lents (puisque cela implique plus d'appels systèmes.
Dès les débuts de cette bibliothèques, la fonction open_image() retournait un un object ClipReader. Le ClipReader manipule un Reader pour sélectionner une zone d'extraction dans l'image cible. Cela permet de concentrer plusieurs ressources dans un seul fichier (ou d'opérer une opération de défilement/slide).
from machine import SPI, Pin from lcd12864 import SPI_LCD12864 from img import open_image import time # PYBStick: S19=mosi, S23=sck, S26=/ss cs = Pin( 'S26', Pin.OUT, value=0 ) spi = SPI( 1 ) spi.init( polarity=0, phase=1 ) lcd = SPI_LCD12864( spi=spi, cs=cs ) def color_transform( rgb ): # Transformer la couleur (r,g,b) en valeur 2 couleurs (1/0) return 0 if rgb==(0,0,0) else 1 reader = open_image( 'mpy.pbm' ) # Garder la partie de l'image à la taille de l'écran reader.clip(0,0,lcd.width,lcd.height) # Copier le contenu dans le FramBuffer du LCD reader.copy_to(lcd, 0,0, color_transform ) lcd.update() # Afficher sur le LCD
Cool comme code, non?
MCHobby investi du temps et de l'argent dans la réalisation de
traduction et/ou documentation. C'est un travail long et fastidieux
réalisé dans l'esprit Open-Source... donc gratuit et librement
accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Ressource
Envie d'en savoir plus sur ces fonctions utilitaires?
- GitHub esp8266-upy/FILEFORMAT (par MCHobby)
Snap!
Écrire un commentaire