Frage

Es gibt einige nette kostenlose Websites zur Konvertierung von Bildern in ASCII-Grafiken wie diese hier: ASCII-art.org

Wie funktioniert ein solcher Bildkonvertierungsalgorithmus?

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

War es hilfreich?

Lösung

Das Gesamtkonzept ist einfach:

  1. Jedem druckbaren Zeichen kann ein ungefährer Graustufenwert zugeordnet werden;das „at“-Zeichen @ ist offensichtlich optisch dunkler als das „Plus“-Zeichen +, Zum Beispiel.Der Effekt variiert je nach der tatsächlich verwendeten Schriftart und dem tatsächlich verwendeten Abstand.

  2. Gruppieren Sie das Eingabebild basierend auf den Proportionen der gewählten Schriftart in rechteckige Pixelblöcke mit konstanter Breite und Höhe (z. B.ein Rechteck mit einer Breite von 4 Pixeln und einer Höhe von 5 Pixeln).Jeder dieser Blöcke wird in der Ausgabe zu einem Zeichen.(Mit den gerade erwähnten Pixelblöcken würde ein 240 B x 320 H großes Bild 64 Zeilen mit 60 Zeichen ergeben.)

  3. Berechnen Sie den durchschnittlichen Graustufenwert jedes Pixelblocks.

  4. Wählen Sie für jeden Pixelblock ein Zeichen aus, dessen Graustufenwert (aus Schritt 1) ​​eine gute Annäherung an den Pixelblockdurchschnitt (aus Schritt 3) ist.

Das ist die einfachste Form der Übung.Eine anspruchsvollere Version wird auch das Original übernehmen Formen der Zeichen berücksichtigt, wenn Gleichstände zwischen Kandidaten für einen Pixelblock gelöst werden.Beispielsweise ein „Schrägstrich“ (/) wäre eine bessere Wahl als ein „Backward Slash“ (\) für einen Pixelblock, der von links unten nach rechts oben ein Kontrastmerkmal zu haben scheint.

Andere Tipps

aalib (letzte Veröffentlichung im Jahr 2001) ist eine Open-Source-ASCII-Kunst-Bibliothek, die verwendet werden in Anwendungen wie mPlayer. Möglicherweise möchten Sie den Quellcode überprüfen, um zu sehen, wie sie es tut. Other than that, diese Seite beschreibt im Detail darüber, wie solche Algorithmen arbeiten.

Sie können auch einen Blick auf libcaca (neueste Version 2014), das Acording zu ihre Website hat die folgenden Verbesserungen gegenüber aalib:

  • Unicode-Unterstützung
  • 2048 verfügbare Farben (einige Geräte können 16 onlyhandle)
  • Dithering von Farbbildern
  • erweiterte Text-Leinwand-Operationen (Blitten, Rotationen)

Ich fand dieses Codeproject Artikel geschrieben von Daniel Fisher ein einfaches enthält C # -Implementierung ein Bild zu ASCII-Art-Umwandlungsalgorithmus.

Dies sind die Schritte das Programm / Bibliothek führt:

  1. Laden Sie das Bild Strom zu einem Bitmap-Objekt
  2. Graustufen die Bitmap ein Graphics-Objekt mit
  3. Schleife durch die Pixel des Bildes (weil wir nicht wollen, ein ASCII-Zeichen pro Pixel, wir nehmen eine pro 10 x 5)
  4. auf jedes Pixel Einfluss des sich ergebenden ASCII-Zeichen lassen, wir Schleife sie und die Helligkeit der Menge des Stroms 10 x 5-Block berechnen.
  5. Schließlich hängen Sie verschiedene ASCII-Zeichen für den aktuellen Block auf der berechneten Betrag basiert.

Ganz einfach, nicht wahr?

BTW: In den Kommentaren zu dem Artikel fand ich diese kühle AJAX Implementierung : Codeproject Artikel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top