62

次のような素敵な無料の「画像から ASCII アートへ」の変換サイトがいくつかあります: ASCII-art.org

このような画像変換アルゴリズムはどのように機能しますか?

                         、                     
                     . W ,                
                     WW @                
                     西、西                
                  , W, :W* .W .             
                  # WW @WW WW #             
                  W www.WWW WW: W             
                  W. WW*WWW# WW@ W             
               * :WWW.WWWWWWW@WWW@W #          
              +* #WWW#WWWWWWWWWWWWW# W          
              やばいwwwwwwwwwwwww          
              www WWWWWWWWWWWWWWWWWW W          
              WWWWWWWWWWWWWWWWWW@W#         
             、WWW.WWWWWWWWWWWWWWWWWWWWW         
              WWW@WWWWWWWWWWWWWWWWWW         
            : WWWWWWWWWWWWWWWWWWWWWWWW :       
            @WWWWWW@WWWWWW@@WWWWWW.        
            W*WWWWWW::::@WWW:::::#WWWWWW        
            WWWWWW@:: :+*:. ::@WWWW        
            wwwww@:*:.:: .,.:.:WWWW        
            @WWWW#:.:::. .:: #:@WWW        
            :WWW@:#. :: :WWWW:@WWWW        
             WWW#*:W@*@W . わ:#WWW        
            #WWWW:@ :: :: *WWWW        
            W@WW*W .::,.::::,:+ @@WW#,       
            WWWW## ,,.: .:::.: . .WWW:,       
            @WWW@: W..::::: #. :WWWW        
             WWWW:: *..:. ::.,. :WWWW        
             WWWW:: :::.: : :: ,@WW@        
             WWWW: .:, : ,, :WW,        
             .: # : , : *         
              W + ., ::: ., : @         
              わ :: .: わ         
           @、、、わ:. ,, ::*@*:, . :@W.,,@      
         +.....*: : : .#WWWWWW: : .#:....+,    
        @...:::*:,, ::WWWWWW, , *::::..,#   
      ::::::::W:, @W::::*W. :W:::::...#  
     @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:

4

4 に答える 4

105

全体像レベルの概念は単純です。

  1. 印刷可能な各文字には、おおよそのグレースケール値を割り当てることができます。たとえば、「アット」記号@は明らかに「プラス」記号よりも視覚的に暗いです+。実際に使用するフォントや間隔によって、効果は異なります。

  2. 選択したフォントの比率に基づいて、入力画像を幅と高さが一定の長方形のピクセル ブロック (たとえば、幅 4 ピクセル、高さ 5 ピクセルの長方形) にグループ化します。このような各ブロックは、出力で 1 文字になります。(前述のピクセル ブロックを使用すると、240wx320h の画像は 60 文字の 64 行になります。)

  3. 各ピクセル ブロックの平均グレースケール値を計算します。

  4. ピクセル ブロックごとに、グレースケール値 (手順 1 から) がピクセル ブロック平均 (手順 3 から) の適切な近似値である文字を選択します。

それがエクササイズの最も単純な形です。より洗練されたバージョンでは、ピクセル ブロックの候補間の関係を断ち切る際に、文字の実際の形状も考慮されます。たとえば、左下から右上へのコントラスト機能があるように見えるピクセル ブロックには/、「バックスラッシュ」( ) よりも「スラッシュ」( ) を選択する方が適しています。\

于 2008-12-27T16:04:00.150 に答える
20

aalib (最終リリースは 2001 年) は、mplayer などのアプリケーションで使用されるオープン ソースの ASCII アート ライブラリです。ソースコードをチェックして、それがどのように機能するかを確認することをお勧めします。それ以外に、このページでは、そのようなアルゴリズムがどのように機能するかについて詳しく説明します。

于 2008-12-27T11:05:57.897 に答える
14

また、libcaca(最新リリース 2014) を参照してください。彼らの Web サイトによると、次の点が改善されていますaalib

  • ユニコードのサポート
  • 2048 色 (一部のデバイスでは 16 色しか処理できません)
  • カラー画像のディザリング
  • 高度なテキスト キャンバス操作 (ブリッティング、回転)
于 2008-12-27T12:04:03.177 に答える
8

Daniel Fisher によって書かれたこのCodeProject の記事には、画像から ASCII アートへの変換アルゴリズムの単純なC# 実装が含まれていることがわかりました。

プログラム/ライブラリが実行する手順は次のとおりです。

  1. イメージ ストリームをビットマップ オブジェクトにロードする
  2. Graphics オブジェクトを使用してビットマップをグレースケールする
  3. 画像のピクセルをループします (ピクセルごとに 1 つの ASCII 文字が必要ないため、10 x 5 ごとに 1 つを取ります)
  4. すべてのピクセルが結果の ASCII 文字に影響を与えるようにするために、それらをループして、現在の 10 x 5 ブロックの量の明るさを計算します。
  5. 最後に、計算された量の現在のブロックに基づいて、さまざまな ASCII 文字を追加します。

とても簡単ですね。

ところで:記事へのコメントで、このクールなAJAX実装を見つけました:Gaia Ajax ASCII Art Generator

[...] 標準化された一連の Web テクノロジで簡単に実行できることを実証しなければならないと感じました。使用するライブラリを見つけられるかどうかを調べてみたところ、Sau Fan Lee の ASCII fying .NET ライブラリに関する codeproject の記事を見つけました。

PS: Lucas (コメントを参照) は別のCodeProject の記事を見つけました。

于 2008-12-27T16:00:43.183 に答える