spl*_*tne 55 algorithm ascii-art
有一些很好的免费"图像到ASCII艺术"转换网站,如下所示:ASCII-art.org
这种图像转换算法如何工作?
                         ,                     
                     .   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@@@@@@@@@@:
    joe*_*ely 94
大画面概念很简单:
可以为每个可打印字符分配近似的灰度值; 例如,"at"符号@在视觉上明显比"plus"符号更暗+.效果会有所不同,具体取决于实际使用的字体和间距.
根据所选字体的比例,将输入图像分组为具有恒定宽度和高度的矩形像素块(例如,矩形4像素宽,5像素高).每个这样的块将成为输出中的一个字符.(使用刚刚提到的像素块,240w-x-320h图像将变为64行,每行60个字符.)
计算每个像素块的平均灰度值.
对于每个像素块,选择一个字符,其灰度值(来自步骤1)是像素块平均值的良好近似值(来自步骤3).
这是最简单的练习形式.更复杂的版本还将在打破像素块的候选者之间的关系时考虑角色的实际形状.例如,对于看起来具有从左下到右上对比度特征的像素块,"斜杠"(/)对于"反斜杠"()是更好的选择\.
我发现这篇由Daniel Fisher编写的CodeProject文章包含了一个简单的C#实现图像到ASCII艺术转换算法.
这些是程序/库执行的步骤:
很简单,不是吗?
顺便说一句:在文章的评论中,我发现了这个很酷的AJAX实现:Gaia Ajax ASCII Art Generator:
[...]我觉得有必要证明它可以很容易地在一套标准化的网络技术中完成.我开始着手查看是否可以找到一些库,我找到了Sau Fan Lee的代码项目文章,关于他的ASCII文件.NET库.
PS:Lucas(见评论)发现了另一篇CodeProject文章.