Image vers ASCII vers SVG
Voici une proposition de page README.md en Markdown qui explique clairement ce que font les deux solutions que tu as listées. Elle est structurée pour être facilement compréhensible par des développeurs ou utilisateurs techniques :
🖼️ Conversion d’image en ASCII puis en SVG
Ce projet propose deux méthodes pour convertir une image (.png) en une représentation ASCII, puis en SVG. L’objectif est de produire une version vectorielle stylisée de l’image, utile pour des rendus légers ou artistiques.
🧩 Prérequis
img2txt(du paquetcaca-utils)sedaasvgImageMagick(convert)chafaa2s
🥇 Solution 1 : img2txt + aasvg
Étapes
Conversion en ASCII avec codes ANSI
On utiliseimg2txtpour générer une version ASCII colorée de l’image :img2txt -W 150 -x 1 -y 2 -d fstein -f ansi picture.png | sed -r 's/\x1B\[[0-9;]*[mK]//g' > picture.txt
-W 150: largeur de sortie en caractères-x 1 -y 2: facteur d’étirement horizontal et vertical-d fstein: algorithme de dithering-f ansi: sortie avec codes ANSI (couleurs)sed ...: suppression des séquences ANSI pour ne garder que les caractères ASCII
Conversion ASCII → SVG
On transforme le fichier ASCII en SVG :aasvg --spaces=0 --stretch --fill < picture.txt > picture.svg
- Chaque glyphe devient un élément
<text>dans le SVG --spaces=0: pas d’espacement entre les caractères--stretch: étirement automatique--fill: remplissage des glyphes
- Chaque glyphe devient un élément
🥈 Solution 2 : ImageMagick + chafa + a2s
Étapes
Prétraitement de l’image
On prépare l’image pour une meilleure détection des contours :convert picture.png -colorspace gray -normalize -edge 1 -threshold 10% picture-pre.png
- Conversion en niveaux de gris
- Normalisation du contraste
- Détection des bords
- Seuillage pour accentuer les contours
Conversion en ASCII simplifié
On génère une version ASCII sans couleurs :chafa --format=symbols --colors=none --dither=none \ --symbols=ascii --size=200x \ picture-pre.png > picture.txt
--symbols=ascii: uniquement des caractères ASCII--colors=none: pas de couleurs--dither=none: pas de tramage--size=200x: largeur de 200 caractères
ASCII → SVG
On convertit le fichier ASCII en SVG :a2s < picture.txt > picture.svg
Nettoyage du SVG
On supprime les lignes parasites :sed '/<g id="lines"/,/<\/g>/d' picture.svg > picture-clean.svg
📁 Résultat
picture.txt: version ASCII de l’imagepicture.svg: version vectoriellepicture-clean.svg: SVG nettoyé (solution 2)
📌 Notes
- La solution 1 est plus rapide et produit un SVG avec des glyphes colorés si on garde les séquences ANSI.
- La solution 2 est plus adaptée pour des rendus en noir et blanc ou des effets de contours.