Comment les algorithmes de conversion d'images d'art ASCII fonctionnent-ils? [fermé]

StackOverflow https://stackoverflow.com/questions/394882

  •  23-08-2019
  •  | 
  •  

Question

Il y a une belle "image à l'art ASCII" libre sites de conversion comme celui-ci: ASCII-art.org

Comment un tel travail de l'algorithme de conversion d'image?

                         ,                     
                     .   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@@@@@@@@@@:

Était-ce utile?

La solution

Le concept de niveau grand-image est simple:

  1. Chaque caractère imprimable peut être affecté d'une valeur approximative d'échelle de gris; le « à » signe @ est évidemment visuellement plus sombre que le + signe « plus », par exemple. L'effet varie, selon la police et l'espacement effectivement utilisé.

  2. Sur la base de la proportion de la police choisie, un groupe de l'image d'entrée en blocs de pixels rectangulaires avec une largeur constante et une hauteur (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 viennent d'être mentionnés, une image 240w-x-320h deviendrait 64 lignes de 60 caractères).

  3. Calculer la valeur moyenne d'échelle de gris de chaque bloc de pixels.

  4. Pour chaque bloc de pixels, sélectionner 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 les formes réelles des personnages en compte lors de la rupture des liens entre les candidats pour un bloc de pixels. Par exemple, un « slash » (/) serait un meilleur choix qu'un « barre oblique inverse » (\) pour un bloc de pixels qui semble avoir une fonction de contraste inférieur-supérieur à gauche à droite.

Autres conseils

aalib (dernière version en 2001) est une bibliothèque d'art ASCII open source qui est utilisé dans des applications comme MPlayer. Vous pouvez vérifier son code source pour voir comment elle le fait. En dehors de cela, cette page décrit plus en détail sur la façon dont ces travaux d'algorithmes.

Vous pouvez aussi jeter un oeil à libcaca (dernière version 2014), qui acording à leur site les améliorations suivantes sur aalib:

  • Prise en charge Unicode
  • 2048 couleurs disponibles (certains appareils peuvent onlyhandle 16)
  • tramage des images couleur
  • Opérations de toile de texte avancé (blitting, rotations)

J'ai trouvé ce CodeProject article écrit par Daniel Fisher contenant simple C # application d'une image à l'algorithme de conversion de l'art ASCII.

Ce sont les étapes du programme / bibliothèque éxécute:

  1. Charger le flux d'images à un objet bitmap
  2. Grayscale l'image 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 laisser toute influence de pixels du char ASCII résultant, on les boucle et calculer la luminosité du montant du 10 courant x bloc 5.
  5. Enfin, ajoutez différents caractères ASCII sur la base du bloc en cours sur le montant calculé.

Assez facile, non?

BTW: Dans les commentaires à l'article que je trouve ce cool mise en œuvre AJAX : CodeProject article

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top