56 votes

Comment fonctionnent les algorithmes de conversion d'images d'art ASCII ?

Il existe de bons sites gratuits de conversion d'images en art ASCII, comme celui-ci : ASCII-art.org

Comment fonctionne un tel algorithme de conversion d'images ?

                         ,                     
                     .   W    ,                
                     W   W    @                
                     W  ,W    W                
                  ,  W, :W\*  .W  .             
                  #  WW @WW  WW  #             
                  W  WW.WWW  WW: W             
                  W. WW\*WWW# WW@ W             
               \* :WW.WWWWWWW@WWW@W  #          
              +\* #WW#WWWWWWWWWWWWW# W          
              W# @WWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW W          
              WW WWWWWWWWWWWWWWWWWW@W#         
             ,WW.WWWWWWWWWWWWWWWWWWWWW         
              WW@WWWWWWWWWWWWWWWWWWWWW         
            : WWWWWWWWWWWWWWWWWWWWWWWW :       
            @ WWWWWWWW@WWWWWWW@@WWWWWW.        
            W\*WWWWWW::::@WWW:::::#WWWWW        
            WWWWWW@::   :+\*:.   ::@WWWW        
            WWWWW@:\*:.::     .,.:.:WWWW        
            @WWWW#:.:::.     .:: #:@WWW        
            :WWW@:#. ::     :WWWW:@WWWW        
             WWW#\*:W@\*@W     .   W:#WWW        
            #WWWW:@      ::   ::  \*WWWW        
            W@WW\*W  .::,.::::,:+  @@WW#,       
            WWWW## ,,.: .:::.: .  .WWW:,       
            @WWW@:   W..::::: #.  :WWWW        
             WWWW::  \*..:.  ::.,. :WWWW        
             WWWW:: :.:.:   :  :: ,@WW@        
             WWWW:  .:,  :  ,,     :WW,        
             .: #         :  ,     : \*         
              W +    .,  :::  .,   : @         
              W ::                .: W         
           @,,,W:.  ,, ::\*@\*:,  . :@W.,,@      
         +.....\*: : : .#WWWWW:  : .#:....+,    
        @...:::\*:,, : :WWWWWWW, ,  \*::::..,#   
      :...::::::W:,   @W::::\*W.   :W:::::...#  
     @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:

94voto

joel.neely Points 17059

Le concept au niveau de la vue d'ensemble est simple :

  1. On peut attribuer à chaque caractère imprimable une valeur approximative de l'échelle de gris ; le signe "at", par exemple. @ est visuellement plus sombre que le signe "plus". + par exemple. L'effet variera en fonction de la police et de l'espacement effectivement utilisés.

  2. Sur la base des proportions de la police choisie, regroupez l'image d'entrée en blocs de pixels rectangulaires de largeur et de hauteur constantes (par exemple, un rectangle de 4 pixels de large et de 5 pixels de haut). Chacun de ces blocs deviendra un caractère dans la sortie. (En utilisant les blocs de pixels que nous venons de mentionner, une image de 240w-x-320h deviendrait 64 lignes de 60 caractères).

  3. Calculez la valeur moyenne de l'échelle de gris de chaque bloc de pixels.

  4. Pour chaque bloc de pixels, sélectionnez un caractère dont la valeur d'échelle de gris (de l'étape 1) est une bonne approximation de la moyenne du bloc de pixels (de l'étape 3).

C'est la forme la plus simple de l'exercice. Une version plus sophistiquée prendra également formes des caractères lors du départage des candidats pour un bloc de pixels. Par exemple, une "barre oblique" ( / ) serait un meilleur choix qu'une "barre oblique inversée" ( \ ) pour un bloc de pixels qui semble avoir une caractéristique de contraste du bas de la gauche vers le haut de la droite.

17voto

codelogic Points 22722

aalib (dernière version en 2001) est une bibliothèque d'art ASCII open source utilisée dans des applications comme mplayer. Vous pouvez consulter son code source pour voir comment elle fonctionne. A part ça, cette page décrit plus en détail le fonctionnement de ces algorithmes.

13voto

daniels Points 6542

Vous pouvez également jeter un coup d'œil à libcaca (dernière version 2014), qui, selon son site web, présente les améliorations suivantes par rapport à la version précédente aalib :

  • Support Unicode
  • 2048 couleurs disponibles (certains appareils ne peuvent en gérer que 16)
  • le dithering des images en couleur
  • opérations avancées sur le canevas de texte (détourage, rotations)

8voto

splattne Points 48126

J'ai trouvé ceci Article de CodeProject écrit par Daniel Fisher contenant un simple Mise en œuvre en C# d'un algorithme de conversion d'images en art ASCII.

Ce sont les étapes que le programme/la bibliothèque effectue :

  1. Charger le flux d'images dans un objet bitmap
  2. Niveaux de gris du bitmap en utilisant un objet Graphique
  3. Boucle à travers les pixels de l'image (parce que nous ne voulons pas un caractère ASCII par pixel, nous prenons un par 10 x 5)
  4. Pour que chaque pixel influe sur le caractère ASCII résultant, nous les bouclons et calculons la luminosité de la quantité du bloc 10 x 5 actuel.
  5. Enfin, ajouter différents caractères ASCII basés pour le bloc actuel sur le montant calculé.

Assez facile, n'est-ce pas ?

BTW : Dans les commentaires de l'article, j'ai trouvé ceci implémentation AJAX cool : Générateur d'art ASCII Gaia Ajax :

[...] Je me suis senti obligé de démontrer que cela pouvait facilement être fait dans un ensemble normalisé de technologies web. J'ai cherché à trouver quelques bibliothèques à utiliser, et j'ai trouvé Sau Fan Lee sur son article Codeproject à propos de son bibliothèque ASCII fying .NET.

P.S. : Lucas (voir commentaires) a trouvé un autre Article de CodeProject .

4voto

mr calendar Points 339
       ___                  _     _           _                    _
      |_ _| __ __ _____ _ _| |_  | |_ ___    (_)__ ___ ____ _   __| |___
       | |  \ V  V / -_) ' \  _| |  _/ _ \   | / _` \ V / _` |_/ _` / -_)
      |___|  \_/\_/\___|_||_\__|  \__\___/  _/ \__,_|\_/\__,_(_)__,_\___|
                                           |__/

et perdu beaucoup de temps...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X