¿Cómo funcionan los algoritmos de conversión ASCII la imagen del arte? [cerrado]

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Hay algunos agradable "imagen de arte ASCII" libre de los sitios de conversión como ésta: ASCII-art.org

¿Cómo funciona un algoritmo de este tipo de conversión de imágenes?

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

¿Fue útil?

Solución

El concepto de imagen de nivel grande es simple:

  1. Cada carácter imprimible se puede asignar un valor aproximado de escala de grises; la "a" @ signo, obviamente, es visualmente más oscuro que el "plus" + señal, por ejemplo. El efecto variará, dependiendo de la fuente y el espaciamiento efectivamente utilizado.

  2. Sobre la base de las proporciones de la fuente elegida, grupo la imagen de entrada en bloques de píxeles rectangulares con anchura constante y la altura (por ejemplo, un rectángulo de 4 píxeles de ancho y 5 píxeles de alto). Cada uno de dichos bloques se convertirá en uno de los personajes en la salida. (El uso de los bloques de píxeles acaba de mencionar, una imagen de 240w-x-320H se convertiría en 64 líneas de 60 caracteres.)

  3. Calcular el valor medio de escala de grises de cada bloque de píxeles.

  4. Para cada bloque de píxeles, seleccionar un carácter cuyo valor de escala de grises (de la etapa 1) es una buena aproximación de la media de bloque de píxeles (de la etapa 3).

Esa es la forma más simple del ejercicio. Una versión más sofisticada también tomará las reales formas de los personajes a la hora de romper los lazos entre los candidatos a un bloque de píxeles. Por ejemplo, una "barra" (/) sería una mejor opción que una "barra invertida" (\) para un bloque de píxeles que parece tener una función de contraste de abajo de izquierda a superior derecha.

Otros consejos

aalib (última versión en 2001) es una biblioteca de arte ASCII de código abierto que se utiliza en aplicaciones como mplayer. Es posible que desee echa un vistazo a su código fuente para ver cómo lo hace. Aparte de eso, esta página describe con más detalle acerca de cómo tales algoritmos de trabajo.

También puedes echar un vistazo a libcaca (última versión de 2014), que según su sitio web tiene las siguientes mejoras sobre aalib:

  • El soporte Unicode
  • 2048 colores disponibles (algunos dispositivos pueden onlyhandle 16)
  • tramado de imágenes en color
  • avanzadas operaciones de lona de texto (blitting, rotaciones)

CodeProject artículo escrito por Daniel Fisher que contiene un sencillo C # aplicación de una imagen a algoritmo de conversión ASCII art.

Estos son los pasos del programa / biblioteca realiza:

  1. Cargar la secuencia de imágenes a un objeto de mapa de bits
  2. Escala de grises el mapa de bits utilizando un objeto Graphics
  3. Bucle a través de los píxeles de la imagen (porque no queremos un carácter ASCII por píxel, tomamos uno por 10 x 5)
  4. Para permitir que todos los píxeles de la influencia del carbón ASCII resultante, el ciclo que ellos y calcular el brillo de la cantidad de la corriente bloque de 10 x 5.
  5. Por último, añadir diferentes caracteres ASCII base para el bloque actual sobre la cantidad calculada.

Muy fácil, ¿verdad?

Por cierto: En los comentarios al artículo me encontré con este enfriar aplicación AJAX: Gaia Ajax ASCII Art Generator :

  

[...] me sentí obligado a demostrar   se podría hacer fácilmente en una   conjunto estandarizado de tecnologías web.   Me puse a ver si podía encontrar alguna   bibliotecas de usar, y me encontré con Sau Ventilador   CodeProject artículo de Lee acerca de su   biblioteca ASCII fying .NET.

PS:. Lucas (ver comentarios) encontró otro CodeProject artículo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top