TRANSFORMATION : IMAGE => ASCII ART

Signaler
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009
-
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

Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009

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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
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 :)
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009

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.
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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.