TRANSFORMATION : IMAGE => ASCII ART

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 27 nov. 2006 à 10:43
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009 - 28 nov. 2006 à 21:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40485-transformation-image-ascii-art

opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
28 nov. 2006 à 21:07
Salut coucou747,
sprintf() est certes lent, mais toujours plus rapide (à peu près 3 fois plus rapide) que ta combinaison color()=decompose()+tohex(), c'est le résultat d'un "bench" des plus basique que j'ai effectué sur 100000 itérations.
Amicalement.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 nov. 2006 à 16:16
sprintf est lent... en C du moins... pour le redimentionnement, c'est aussi lent... bref, j'aime bien ma méthode, et si elle est lente, c'est que le calcul l'est :)
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
28 nov. 2006 à 00:36
Salut coucou747
90 secondes pour afficher une image de 60x60 pixels et de 1,6 KB (il s'agit en fait ton "avatar")!
Mon pc n'est pas de première jeunesse, mais quand même!
Bien que je ne sois pas sûr que ton script s'exécute correctement chez moi (par exemple certains caractères de l'"alphabet" ne s'affichent pas d'une couleur qui permette de les différencier du fond : est-ce normal?), ce qui est certain, c'est qu'il gagnerait à être optimisé.

Sur la forme,
passons vite fait sur les divisions et les multiplications par des puissances de 2 que l'on peut optimiser par des décalages avec >> et <<,
l'appel à ta fonction color() (qui fait elle appel aux fonctions decompose() et tohex()!) peut être remplacé
sans état d'âme par celui de la fonction sprintf(), certainement plus optimisée (un grand merci en passant
aux inventeurs du langage C).
ex :
color($c1)
est équivalent à :
sprintf('#%06X',$c1)

Sur le fond,
la fonction colorfor($a,$x,$y,$nx,$ny,$alphabet), qui calcule, en faisant des moyennes, la couleur pour chaque cellule de ton tableau html, est-ce qu'on obtiendrait pas la même chose en réduisant l'image, avec imagecopyresized(), directement aux dimensions $ncx et $ncy ? (et après on prendrait la couleur de chacun de ses pixels pour la reporter dans le tableau?).
Amicalement.
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
27 nov. 2006 à 11:00
Salut,
Un petit peu long à l'exécution sur mon poste (image de 12Ko). Mais le résultat vaut bien d'attendre 4 secondes.
Sympa également pour la pixelisation d'images.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 nov. 2006 à 10:43
Hello Coucou,

très amusant et sympa :-)
Pour coller plus à l'esprit ascii art, je proposerais même une version en dégradés de gris, si j'étais toi.
Rejoignez-nous