ASCII艺术图像转换算法如何工作?

时间:2008-12-27 10:43:44

标签: 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@@@@@@@@@@:

4 个答案:

答案 0 :(得分:92)

大画面概念很简单:

  1. 每个可打印字符都可以分配一个近似的灰度值;例如,“at”符号@在视觉上明显比“加号”符号+更暗。效果会有所不同,具体取决于实际使用的字体和间距。

  2. 根据所选字体的比例,将输入图像分组为具有恒定宽度和高度的矩形像素块(例如,矩形4像素宽,5像素高)。每个这样的块将成为输出中的一个字符。 (使用刚刚提到的像素块,240w-x-320h图像将变为64行,每行60个字符。)

  3. 计算每个像素块的平均灰度值。

  4. 对于每个像素块,选择一个灰度值(来自步骤1)是像素块平均值的良好近似值的字符(从步骤3开始)。

  5. 这是最简单的练习形式。更复杂的版本还将在打破像素块的候选者之间的关系时考虑字符的实际形状。例如,“斜杠”(/)对于像素块看起来比左下到右上更好的选择比“反斜杠”(\)更好。对比度特征。

答案 1 :(得分:16)

aalib(2001年最后一个版本)是一个开源的ASCII艺术库,用于mplayer等应用程序。您可能想查看其源代码以了解它是如何做到的。除此之外,this page更详细地描述了这些算法的工作原理。

答案 2 :(得分:12)

另外,您可以查看libcaca(最新发布的2014年版),根据其网站对aalib进行了以下改进:

  • Unicode支持
  • 2048种可用颜色(某些设备只能处理16种颜色)
  • 彩色图像的抖动
  • 高级文本画布操作(blitting,rotation)

答案 3 :(得分:7)

我发现这个CodeProject article written by Daniel Fisher包含一个简单的 C#实现图像到ASCII艺术转换算法。

这些是程序/库执行的步骤:

  1. 将图像流加载到位图对象
  2. 使用Graphics对象对位图进行灰度显示
  3. 遍历图像的像素(因为我们不希望每个像素使用一个ASCII字符,我们每10 x 5需要一个)
  4. 为了让每个像素影响生成的ASCII字符,我们循环它们并计算当前10 x 5块的亮度。
  5. 最后,根据计算出的数量为当前块追加不同的ASCII字符。
  6. 很简单,不是吗?

    BTW:在文章的评论中,我发现了这个很酷的AJAX实现Gaia Ajax ASCII Art Generator

      

    [...]我觉得有必要证明   它很容易在一个   标准化的Web技术集。   我开始看看能不能找到一些   图书馆使用,我找到了范凡   李的代码项目关于他的文章   ASCII fying .NET库。

    P.S。:Lucas(见评论)发现了另一个CodeProject article