Domanda

Ci sono alcuni "immagine di arte ASCII" bello libero siti di conversione come questo: ASCII-art.org

Come funziona un tale lavoro immagine algoritmo di conversione?

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

È stato utile?

Soluzione

Il concetto-di livello quadro generale è semplice:

  1. Ogni carattere stampabile può essere assegnato un valore approssimativo scala di grigi; il simbolo "at" @ ovviamente è visivamente più scuro del segno "più" +, per esempio. L'effetto varierà, a seconda del carattere e spaziatura effettivamente utilizzato.

  2. In base alle proporzioni del carattere scelto, gruppo immagine di ingresso in blocchi di pixel rettangolari con larghezza costante ed altezza (ad esempio un rettangolo di 4 pixel di larghezza e 5 pixel). Ciascun tale blocco diventerà un carattere nell'output. (Usando i blocchi di pixel appena menzionati, un'immagine 240W-x-320H diventerebbe 64 righe di 60 caratteri.)

  3. Calcolare il valore di grigio medio scala di ciascun blocco di pixel.

  4. Per ciascun blocco di pixel, selezionare un carattere il cui valore in scala di grigi (dalla fase 1) è una buona approssimazione della media blocco di pixel (passaggio 3).

Questa è la forma più semplice di esercizio. Una versione più sofisticata anche prendere l'effettivo forme dei personaggi in considerazione quando si rompe i legami tra i candidati per un blocco di pixel. Ad esempio, un "slash" (/) sarebbe una scelta migliore di un "barra rovesciata" (\) per un blocco di pixel che sembra avere una funzione di contrasto basso a sinistra a in alto a destra.

Altri suggerimenti

aalib (ultima release nel 2001) è una biblioteca d'arte open source ASCII che viene usato in applicazioni come mplayer. Si consiglia di controllare il suo codice sorgente per vedere come lo fa. Oltre a questo, questa pagina descrive in modo più dettagliato su come tale lavoro algoritmi.

Inoltre è possibile dare un'occhiata a libcaca (ultima versione 2014), che di tronchi con a il loro sito web ha i seguenti miglioramenti rispetto aalib:

  • Supporto Unicode
  • 2048 colori disponibili (alcuni dispositivi possono onlyhandle 16)
  • retinatura di immagini a colori
  • avanzate operazioni di tela di testo (copiarlo sul video, rotazioni)

Ho trovato questo CodeProject articolo scritto da Daniel Fisher contenente un semplice C # implementazione di un immagine da algoritmo di conversione ASCII art.

Questi sono i passi del programma / libreria esegue:

  1. Caricare il flusso di immagini ad un oggetto bitmap
  2. Scala di grigio la bitmap utilizzando un oggetto Graphics
  3. Loop attraverso pixel dell'immagine (perché noi non vogliamo un carattere ASCII per pixel, prendiamo uno per 10 x 5)
  4. Per consentire a ciascun pixel influenza il carattere ASCII risultante, cappio loro e calcolare la luminosità della quantità di corrente 10 x 5 blocco.
  5. Infine, aggiungere diversi caratteri ASCII a base per il blocco attuale sulla quantità calcolata.

Abbastanza facile, non è vero?

A proposito: Nei commenti all'articolo ho trovato questo raffreddare AJAX realizzazione : Gaia Ajax ASCII Art Generator :

  

[...] mi sono sentito in dovere di dimostrare   potrebbe essere facilmente fatto in un   insieme standardizzato di tecnologie web.   Ho deciso di vedere se riuscivo a trovare un po '   librerie da usare, e ho trovato Sau Fan   articolo CodeProject di Lee sulla sua   biblioteca ASCII fying NET.

PS:. Lucas (vedi commenti) ha trovato un altro CodeProject articolo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top