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.txtavec 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
Enregistrer un commentaire