jpg hacker funny code christopher art achieve algorithm ascii-art

algorithm - hacker - ascii funny art



¿Cómo funcionan los algoritmos de conversión de imágenes artísticas ASCII? (4)

Hay algunos buenos sitios gratuitos de conversión de "imágenes a arte ASCII" como este: ASCII-art.org

¿Cómo funciona un algoritmo de conversión de imagen?

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


Encontré este artículo de CodeProject escrito por Daniel Fisher que contiene una implementación simple de C # de una imagen al algoritmo de conversión de arte ASCII.

Estos son los pasos que realiza el programa / biblioteca:

  1. Cargue la secuencia de la imagen en un objeto de mapa de bits
  2. Escala de grises del mapa de bits utilizando un objeto Graphics
  3. Pasa por los píxeles de la imagen (porque no queremos un carácter ASCII por píxel, tomamos uno por cada 10 x 5)
  4. Para permitir que cada píxel influya en el carácter ASCII resultante, los bucleamos y calculamos el brillo de la cantidad del bloque actual de 10 x 5.
  5. Finalmente, añada diferentes caracteres ASCII basados ​​en el bloque actual en la cantidad calculada.

Muy fácil, ¿no?

Por cierto: en los comentarios al artículo encontré esta genial implementación de AJAX : Gaia Ajax ASCII Art Generator :

[...] Me sentí obligado a demostrar que podría hacerse fácilmente en un conjunto estandarizado de tecnologías web. Me puse a buscar si podía encontrar algunas bibliotecas para usar, y encontré el artículo del proyecto de código de Sau Fan Lee sobre su biblioteca .NET de filo ASCII.

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


El concepto de gran imagen es simple:

  1. A cada carácter imprimible se le puede asignar un valor aproximado de escala de grises; el signo "a" @ obviamente es visualmente más oscuro que el signo "más" + , por ejemplo. El efecto variará, dependiendo de la fuente y el espaciado realmente utilizado.

  2. En función de las proporciones de la fuente elegida, agrupe la imagen de entrada en bloques de píxeles rectangulares con ancho y alto constantes (por ejemplo, un rectángulo de 4 píxeles de ancho y 5 píxeles de alto). Cada bloque se convertirá en un personaje en la salida. (Usando los bloques de píxeles recién mencionados, una imagen de 240w-x-320h se convertiría en 64 líneas de 60 caracteres).

  3. Calcule el valor promedio de escala de grises de cada bloque de píxeles.

  4. Para cada bloque de píxeles, seleccione un personaje cuyo valor de escala de grises (del paso 1) sea una buena aproximación del promedio de bloques de píxeles (desde el paso 3).

Esa es la forma más simple del ejercicio. Una versión más sofisticada también tendrá en cuenta las formas reales de los personajes al romper los vínculos entre los candidatos para un bloque de píxeles. Por ejemplo, una "barra inclinada" ( / ) sería una mejor opción que una "barra invertida" ( / ) para un bloque de píxeles que parece tener una característica de contraste de abajo a la izquierda-arriba-derecha.


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

  • Soporte Unicode
  • 2048 colores disponibles (algunos dispositivos solo pueden manejar 16)
  • tramado de imágenes en color
  • operaciones avanzadas de lienzo de texto (blitting, rotaciones)

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 verificar su código fuente para ver cómo lo hace. Aparte de eso, esta página describe con más detalle cómo funcionan dichos algoritmos.