Générer un message d’anniversaire en « pixel art emojis » avec Python

Générer un message d’anniversaire en « pixel art emojis » avec Python

Dans ce tutoriel, on va créer un petit script Python qui transforme un texte comme BON ANNIV GROS BISOUS en un grand pavé d’emojis 🟨⬛, prêt à être copié-collé dans WhatsApp, Signal, Discord, etc.

L’idée : chaque lettre est dessinée comme une mini matrice 5×5, avec un émoji pour les pixels « allumés » et un autre pour les pixels « éteints ».


1. Le principe : une lettre = une matrice d’emojis

Par exemple, voici la lettre B dessinée en 5×5 avec 🟨 et ⬛ :

🟨🟨🟨⬛⬛
🟨⬛⬛🟨⬛
🟨🟨🟨⬛⬛
🟨⬛⬛🟨⬛
🟨🟨🟨⬛⬛
  

En enchaînant les lettres les unes sous les autres, on peut afficher un message entier comme BON ANNIV GROS BISOUS uniquement avec des blocs d’emojis.


2. Prérequis

  • Python 3 installé sur votre machine (Windows, macOS ou Linux).
  • Un éditeur de texte simple (Notepad, VS Code, etc.).
  • Un terminal / invite de commande pour lancer le script.

3. Le script Python complet

Créez un fichier nommé par exemple emoji_font.py, et collez le code ci-dessous :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

FILLED = "🟨"
EMPTY = "⬛"

# Police 5x5 pour A–Z, 0–9 et espace.
# 1 = pixel allumé (FILLED), 0 = pixel éteint (EMPTY)
FONT = {
    "A": ["01110", "10001", "11111", "10001", "10001"],
    "B": ["11100", "10010", "11100", "10010", "11100"],
    "C": ["01110", "10001", "10000", "10001", "01110"],
    "D": ["11100", "10010", "10010", "10010", "11100"],
    "E": ["11111", "10000", "11110", "10000", "11111"],
    "F": ["11111", "10000", "11110", "10000", "10000"],
    "G": ["01110", "10000", "10111", "10001", "01110"],
    "H": ["10001", "10001", "11111", "10001", "10001"],
    "I": ["01110", "00100", "00100", "00100", "01110"],
    "J": ["00111", "00001", "00001", "10001", "01110"],
    "K": ["10001", "10010", "11100", "10010", "10001"],
    "L": ["10000", "10000", "10000", "10000", "11111"],
    "M": ["10001", "11011", "10101", "10001", "10001"],
    "N": ["10001", "11001", "10101", "10011", "10001"],
    "O": ["01110", "10001", "10001", "10001", "01110"],
    "P": ["11110", "10001", "11110", "10000", "10000"],
    "Q": ["01110", "10001", "10001", "10101", "01111"],
    "R": ["11110", "10001", "11110", "10100", "10010"],
    "S": ["01111", "10000", "01110", "00001", "11110"],
    "T": ["11111", "00100", "00100", "00100", "00100"],
    "U": ["10001", "10001", "10001", "10001", "01110"],
    "V": ["10001", "10001", "10001", "01010", "00100"],
    "W": ["10001", "10001", "10101", "11011", "10001"],
    "X": ["10001", "01010", "00100", "01010", "10001"],
    "Y": ["10001", "01010", "00100", "00100", "00100"],
    "Z": ["11111", "00010", "00100", "01000", "11111"],
    "0": ["01110", "10011", "10101", "11001", "01110"],
    "1": ["00100", "01100", "00100", "00100", "01110"],
    "2": ["01110", "10001", "00010", "00100", "11111"],
    "3": ["11110", "00001", "00110", "00001", "11110"],
    "4": ["00010", "00110", "01010", "11111", "00010"],
    "5": ["11111", "10000", "11110", "00001", "11110"],
    "6": ["01110", "10000", "11110", "10001", "01110"],
    "7": ["11111", "00001", "00010", "00100", "01000"],
    "8": ["01110", "10001", "01110", "10001", "01110"],
    "9": ["01110", "10001", "01111", "00001", "01110"],
    " ": ["00000", "00000", "00000", "00000", "00000"],
}


def render_char(ch: str) -> list[str]:
    """Retourne les 5 lignes emoji pour le caractère ch."""
    pattern = FONT.get(ch.upper(), FONT[" "])
    lines: list[str] = []
    for row in pattern:
        line = "".join(FILLED if c == "1" else EMPTY for c in row)
        lines.append(line)
    return lines


def render_text_vertical(text: str, spacing: int = 1) -> str:
    """
    Empile chaque caractère l'un sous l'autre (comme un totem),
    séparé par `spacing` lignes vides.
    """
    blocks: list[str] = []
    for ch in text:
        if ch == "\n":
            # Saut de ligne logique dans le texte
            blocks.append("")
            continue
        letter_lines = render_char(ch)
        blocks.extend(letter_lines)
        # lignes vides entre les lettres
        blocks.extend([EMPTY * 5] * spacing)

    # supprimer les lignes vides finales en trop
    while blocks and (blocks[-1] == "" or all(c == EMPTY for c in blocks[-1])):
        blocks.pop()

    return "\n".join(blocks)


if __name__ == "__main__":
    import sys
    from pathlib import Path

    # Usage :
    #   python emoji_font.py "BON ANNIV GROS BISOUS" art.txt
    # ou :
    #   python emoji_font.py "BON ANNIV GROS BISOUS"
    # (dans ce cas, seulement affichage dans la console)

    if len(sys.argv) >= 2:
        input_text = sys.argv[1]
    else:
        input_text = "BON ANNIV GROS BISOUS"

    art = render_text_vertical(input_text, spacing=1)

    # Affichage dans le terminal
    print(art)

    # Si un deuxième argument est donné, on l’utilise comme nom de fichier
    if len(sys.argv) >= 3:
        out_path = Path(sys.argv[2])
        out_path.write_text(art + "\n", encoding="utf-8")
        print(f"\n✅ Art emoji enregistré dans : {out_path.resolve()}")

  

Ce script :

  • définit une petite « police » 5×5 pour les lettres A–Z et les chiffres ;
  • convertit chaque ligne binaire (« 1 » = pixel allumé, « 0 » = pixel éteint) en emojis 🟨 / ⬛ ;
  • empile les lettres verticalement pour former un « totem » d’emojis ;
  • affiche le résultat dans le terminal et, si un nom de fichier est fourni, l’enregistre dans un fichier texte.

4. Comment lancer le script

4.1. Exemple simple

Dans un terminal, placez-vous dans le dossier qui contient emoji_font.py et tapez :

python emoji_font.py "BON ANNIV GROS BISOUS"
  

Le terminal affichera un grand pavé d’emojis 🟨⬛ représentant le texte.
Vous pouvez alors le sélectionner, copier, et le coller dans WhatsApp.

4.2. Enregistrer le résultat dans un fichier

Pour enregistrer le rendu dans un fichier texte (par exemple anniv_emoji.txt) :

python emoji_font.py "BON ANNIV GROS BISOUS" anniv_emoji.txt
  

Le script va :

  • afficher le résultat dans le terminal ;
  • créer (ou écraser) le fichier anniv_emoji.txt avec le même contenu.

Vous pouvez ensuite ouvrir ce fichier, copier le pavé d’emojis et le coller dans l’application de votre choix.


5. Personnaliser le message

Le texte est simplement passé en argument à Python. Quelques exemples :

python emoji_font.py "BON ANNIV" anniv.txt
python emoji_font.py "GROS BISOUS" bisous.txt
python emoji_font.py "FELIX TONTON DOM" felix_tonton_dom.txt
  

Vous pouvez bien entendu modifier la variable FILLED en haut du fichier pour utiliser un autre émoji de « pixel », par exemple :

FILLED = "🟥"  # rouge
EMPTY = "⬛"   # fond noir
  

6. Idées d’extensions

  • Ajouter une autre couleur pour le contour, et garder 🟨 pour l’intérieur des lettres.
  • Générer aussi une version « horizontale » (lettres côte à côte) pour faire une bannière.
  • Ajouter le support de ponctuation ("!", "?", ":", etc.) en complétant le dictionnaire FONT.
  • Faire une petite interface web ou un script qui copie automatiquement le résultat dans le presse-papiers.

Avec quelques dizaines de lignes de Python, on obtient donc un petit générateur de « pixel art » en emojis, parfait pour des messages d’anniversaire ou des surprises dans les groupes de discussion 🎉.

Commentaires

Posts les plus consultés de ce blog

Basthon.fr

mBot2 - programmation mBlock/python

Mario Kart 2D