Character representation of grey scale images

Written by Paul Bourke
February 1997


"Standard" character ramp for grey scale pictures, black -> white.

   "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. "
A more convincing but shorter sequence for representing 10 levels of grey is
   " .:-=+*#%@"
An obvious problem is the variation in apparent density between some typefaces.

Another issue is the stretching in height due to the rectangular aspect ratio of characters. When creating such images by software by sampling "real" images it is common to sample half as often in the vertical direction. Of course if the aspect ratio of the font being used is known then exact vertical and horizontal sampling can occur.

As an example consider the following grey scale ramp on the left and the corresponding ASCII character representation on the right.

=======--------:::::::::........                  
=========--------:::::::::........                
++=========--------:::::::::........              
++++========---------:::::::::........            
++++++========---------:::::::::........          
++++++++=========--------:::::::::........        
*+++++++++=========--------:::::::::........      
***+++++++++=========--------:::::::::........    
******++++++++=========--------:::::::::........  
********++++++++=========--------:::::::::........
#*********++++++++=========--------:::::::::......
###*********++++++++=========--------:::::::::....
#####********+++++++++=========--------:::::::::..
#######********+++++++++=========--------:::::::::
#########*********++++++++=========--------:::::::
%%#########********+++++++++========---------:::::
%%%%#########********+++++++++=========--------:::
%%%%%%#########********+++++++++=========--------:
%%%%%%%%#########*********++++++++========--------
@@%%%%%%%%#########********+++++++++========------
@@@@%%%%%%%%#########*********++++++++========----
@@@@@@%%%%%%%%#########********+++++++++=========-
@@@@@@@@%%%%%%%%#########********+++++++++========
@@@@@@@@@@%%%%%%%%#########*********++++++++======
@@@@@@@@@@@@%%%%%%%%#########********+++++++++====

Other Examples

                                                         ...                                                    
                                                       ...::.....                                               
                                                      ....:=-:--+..                                             
                                                    ......::-+:.....                                            
                                                 .......::-+@%=:.:....                                          
                                              ........:-=%@@@@@#@-......                                        
                                           ...........::%@@@@@@@#::........                                     
                                        ....:::+:.:::::--%@@@@@#-::::......::.                                  
                                     .......:*@#+=-=@@%@@@@@@@@@@%@+@#::--:-::..                                
                                  ..........::#@@@@@@@@@@@@@@@@@@@@@@@@=@@@@*:..                                
                         ..................+:-+%@@@@@@@@@@@@@@@@@@@@@@@@@@@*:....                               
                     ..:.................:+@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=:....                               
                   ....:=:.....=:......::-+#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=-*:..                              
                  .....:+-=*::-++-=::::::+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*...                              
                .......::-+@@*@@@%%@%----%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@--...                              
             .........:--=%@@@@@@@@@@@@=+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+:...                              
        ..........:+:::-+@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-...                               
   ..............:::%%@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-....                               
+++++++*#+++*****#*%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-:.....                               
     ...........:::=*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=.....                               
       ...........:+-:--#@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*:...                               
           ..........::-+#@@@@@@@@@@@@@=+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-....                              
               ........::-#@@%@@@@@@@=---@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#=...                              
                 ......:--*#=--+%-*-:::::#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*:...                              
                   ....:=:....:+::....:::=#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+@:..                              
                    ...::...............::=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#::...                               
                        ..................:#-+#@@@@@@@@@@@@@@@@@@@@@@@@@@@%=:....                               
                                 ...........::#@@@@@@@@@@@@@@@@@@@@@@@@+@@@#-:..                                
                                    ........:%#@%*-+@@@@@@@@@@@@@@@%@+-:-*:--:..                                
                                       .....--*#::::+:--=*@@@@@*---:-:.....:-..                                 
                                          ...........:::*@@@@@@@#::.........                                    
                                             .........::=@@@@@@@#-.......                                       
                                                .......:---*@@=:-:....                                          
                                                   .......::=*::....                                            
                                                     .....::+:+-+..                                             
                                                       ...:=....                                                
                                                        ...:..                                                  
              .@.                                    .
              @m@,.                                 .@
             .@m%nm@,.                            .@m@
            .@nvv%vnmm@,.                      .@mn%n@
           .@mnvvv%vvnnmm@,.                .@mmnv%vn@,
           @mmnnvvv%vvvvvnnmm@,.        .@mmnnvvv%vvnm@
           @mmnnvvvvv%vvvvvvnnmm@, ;;;@mmnnvvvvv%vvvnm@,
           `@mmnnvvvvvv%vvvvvnnmmm;;@mmnnvvvvvv%vvvvnmm@
            `@mmmnnvvvvvv%vvvnnmmm;%mmnnvvvvvv%vvvvnnmm@
              `@m%v%v%v%v%v;%;%;%;%;%;%;%%%vv%vvvvnnnmm@
              .,mm@@@@@mm%;;@@m@m@@m@@m@mm;;%%vvvnnnmm@;@,.
           .,@mmmmmmvv%%;;@@vmvvvvvvvvvmvm@@;;%%vvnnm@;%mmm@,
        .,@mmnnvvvvv%%;;@@vvvvv%%%%%%%vvvvmm@@;;%%mm@;%%nnnnm@,
     .,@mnnvv%v%v%v%%;;@mmvvvv%%;*;*;%%vvvvmmm@;;%m;%%v%v%v%vmm@,.
 ,@mnnvv%v%v%v%v%v%v%;;@@vvvv%%;*;*;*;%%vvvvm@@;;m%%%v%v%v%v%v%vnnm@,
 `    `@mnnvv%v%v%v%%;;@mvvvvv%%;;*;;%%vvvmmmm@;;%m;%%v%v%v%vmm@'   '
         `@mmnnvvvvv%%;;@@mvvvv%%%%%%%vvvvmm@@;;%%mm@;%%nnnnm@'
            `@mmmmmmvv%%;;@@mvvvvvvvvvvmmm@@;;%%mmnmm@;%mmm@'
               `mm@@@@@mm%;;@m@@m@m@m@@m@@;;%%vvvvvnmm@;@'
              ,@m%v%v%v%v%v;%;%;%;%;%;%;%;%vv%vvvvvnnmm@
            .@mmnnvvvvvvv%vvvvnnmm%mmnnvvvvvvv%vvvvnnmm@
           .@mmnnvvvvvv%vvvvvvnnmm'`@mmnnvvvvvv%vvvnnmm@
           @mmnnvvvvv%vvvvvvnnmm@':%::`@mmnnvvvv%vvvnm@'
           @mmnnvvv%vvvvvnnmm@'`:::%%:::'`@mmnnvv%vvmm@
           `@mnvvv%vvnnmm@'     `:;%%;:'     `@mvv%vm@'
            `@mnv%vnnm@'          `;%;'         `@n%n@
             `@m%mm@'              ;%;.           `@m@
              @m@'                 `;%;             `@
              `@'                   ;%;.             '    
               `                    `;%;          

   
                                              _.oo.
                      _.u[[/;:,.         .odMMMMMM'
                   .o888UU[[[/;:-.  .o@P^    MMM^
                  oN88888UU[[[/;::-.        dP^
                 dNMMNN888UU[[[/;:--.   .o@P^
               ,MMMMMMN888UU[[/;::-. o@^
                NNMMMNN888UU[[[/~.o@P^
                888888888UU[[[/o@^-..
               oI8888UU[[[/o@P^:--..
            .@^  YUU[[[/o@^;::---..
          oMP     ^/o@P^;:::---..
       .dMMM    .o@^ ^;::---...
      dMMMMMMM@^`       `^^^^
     YMMMUP^
      ^^


                 ,:
               ,?}'
             =!J |
           ,*-. ?&
           WP) Y9P
          YP   ,W'
         ,W)  ,WW.'
         WW) ,WWW)
         7W),WWWW'
         `WWWWWW'
          9---W)
      ,,--WPL=YXW===
     (P),CY:,I/X'F9P
     WUT===---/===9)
     -HP+----Y(C=9W)
      '9Y3'-'-OWPT-
       'WWLUIECW
        (:7L7C7'
       ,P--=YWFL
       Y-=:9)UW:L
       3-'9=WU/.7
      ,WP9HTFUW'()
       9W7W))UF 9)
       7WYW))PW W
        7WH)),WC)
         7L--/XY)
         9+-,KY7)
         W9-Y3+7)
         W'=9WI7)
        ,W  '-YY)
         W    ::W                ,
        ,T     :X)              ()
        ()     '9W  'L.         ()         ,-
        (C     =:9   '9L        ()        ,T
        ()    ,,-7)    7WL      WW      ,F'
        ()    , T9)     '9WL    --    ,YF
        ()    '-/(W       -==+PE9P7===O)          -,
        'W, ,  T+/WX=L-. ,WP+()+3L3,),=WL  --==-T-
         7)    -,YW '-=9WPL+PT-- ':--L/=9WP=-'
         'W-,.-,++W.   WWHP    ,,-/  .9CP3)
          W  --':-9:7=9W-T ,-=FT''=++,(TFYW=====---,
          W    .-='/.  7W-,WE=--,,=-:9H=9W""~~~~~~'
          ()   ':'/Y,  (L-9PXWWW,YWWX,(U3C        
          9' ,,::/Y,/,  7LW+'-'7)()-'(MWW)
       ,,-/:',T,'-:',) ,3WWW, .Y=W'.(+WPW)
      ,F=T:9/:':C' /W),WMW9PO),m-+--9+WYW)
     ,3Y:/--.'-,',F=FHWWE/LMWU.'--X3CWW(WL
     YP:/:' -/'-Y-,W-T)9X,WCWWWX=WWWW39/OW
     7WF:=,/:-:P:,P(-'))PWWHYT79WWWHPW0W7W'
     'WU7C-:=-=-C9'WF,):):H7L   '7CI7WEXP'
      7L-,Y==3F:::,=,:-/,'P=.,  ':79UWEW)
      'WEW9P=/,)/ -:,P: / L7:'-=,-+YMWWW)
       'W)+=T,T()/-,F,,,),)  ',.-+(L=W9WW.
        '+C/:I'''',P:''/ '  ''9.  == '-'7-
         (W-+'. ,YF )/:'      ')-. ,-:FX-L
         'WM/',/CP /,:'    ..:)  ,T','/: 'W,
          W--,YXT /'')   ,P=-/',P'  '(:'  'W,
          (WEXWF Y' ,)  ,/'-,,YT    ///  ,,'W.
         ,WWWWT,,' .Y:/.',,-,=',- ,YY(). +3,W)
         WFXF:,'P ,,)/  ,',P',,- ,FI,))) I3'W)
         -HP,X'',/ '  ,/,/' ,/',,P3'I(:) W) W)       /=+=,
          9WY).,/'  ,/'-'   ,-=9-/'Y'((',W) PW      /'  '-==L,
          'WY,'    ,/,P   ,YP- C/',',)( (W'(WW.    /'       '7==L.
           ()'    /:/' ,,WT'  3F',' /)W (W (K()   /'   .        '7X
           ()   ,P,P',)T=:- ,WP'.' ,P,T (W (-9L ,Y)' ,X//, .    Y:P
          ,F   ,F,',--,/:' ,+P' '  Y):) (E' YHWLWT)-''-9/',-' ,,,WF
         ,P.,P,)-3-- ,-,' ,WF.    ,Y (' (L-WCTWEW30V-/',:'=/P+E7WF
         W- Y,P/C)',Y',' ,WT      Y) :  (P-=Y:UW9CX)3-=- ,W:9/PXXW.
        /T./:P/)' ,P',' YW-      ,P'',  9M).())WTHW3,C'  9C9='W3WW)
       ,EPOP/YR. /F ,',/W)       /'  :  (W)'W979WO0=WC:,..9LPXWWP-
       3H:WL-R' /' /' /WF       ,) ,,   (U'(HW=WWXO:--:,:'(W=WWF'
      ,WLWWWI:,F' /-'3WF '      Y  ) ,  (),T(0)WO9YPL.' ',WP=='
        --YWX-F  Y',WWT' :':   (' ()7)  (MT: WP)3C)-''  3C'
            WF  /' YW--,  ,    Y  W (),YM+C' 9+I3UV:' .YP'
           (T  3',H3-.. ,..  .,) ,) ()F-=T-. (0,9L,'  /P'
           ,W Y' 33P  .  /    Y  Y) (Y' R,:  7)Y+-),,=W'
           /',F.,W)     ,,.' ,) ,W) +)  3),  (WT9XW=3P'
          /F:T.:WF.  '..:'   :' (W. 7) '=),  'WT7WWP '
         ,P,F''WF  . , :-': ,)  YC../) 'HY.   WP0WC'
        ,P:9::YP   '  '('   :   W) .W)  +3)   9TLWC
        (P/Y(,P' ... '':, .,)  ,W) :3)  X+.   WFUW)
        'WW),I','  .., =  ':  ,O+' ,W'  )9,   99U()
         7W,='.,' ' :.'. . '  ,W)  =3   )+.  ,OH:O)
         'L,F,: '. :C::' '    (W)  9W   7+    'H,:L
          7W'++: .. ,':' '    YT   Y).  :-.    XU:W
          (T':,''','','       3'  ,-)   ,-'    77XW
          (W),J.-:/-:))'      P   )9)   :,Y  .  T,9)
          (WUI:TY:,,,:,      /' ,- W)   YC:     9/7)
          (U),-:-''.'=      (:,F' (W)   ,Y.     3=:L
           (),:::',)/'    ,,F9W'  YW)   /L.    .7=9W,
           (LUL-L.T-'.' ,WXM(W)   3W)   'U.     ,)-W
           3X=((:,' ' ,WMWF-(+'   WW'   '=,'    ,ICW
          ,T)=)K-=':-WPIWP':,:   ,WW    +/, ..' :+,9)
          Y):LX:.:=EHR,PU:'/''   (WW    I:=, .,-9CO)
          ()-+,,HPT+C:W9= ,)'    /WT'   T.: --PCXCKF'
          7LIHTP+OY3LW'3:,L..    WW)    ,,(W('MX'WT'
           7T,I-:XF:WF(: ,)    ':WWT  ,=PT:T(AY) W
           (PWW)W3=/P,P  ,     ,'WW),YP,WH,)Y)TWX9)
           3)OWRE)-YUY'... '  ..(WWXWW)9W+C)WUP9P3'
          ,WTHEF:LOP:W ' ,.   ,:(WPY(W,(P::)W(P3+)
          (P3WF/:WM:() :.:      (WHY)39HC'U()(W,W)
          (LW9/CWY-,E'  ,'     'YPL/T:WP:,(()3Y W)
          (TLUEEP=7W+.,:)       -P-:,PWT.:Y()() W+
          (EP/30-OAT .'3  . . . .C,P):WP Y)()3C:PW
          (PWMH:FXW'',-(, '   ',97WMU(7: )LW W .WW
          (WOWF-7EP)-X3., , ,,WP+WYY+YW' )WW 3 .W7)
           9W93UOY):.)/.- :YWCWU-EIMC)E (-WP + ,WW'
           (XWYUWY.,:'.,,YE3-7WE3WXV(UT,( W),T =P'
           (PT709),)C:/FY9)T.(W9YHL/Y(C T,W)') W.
           (+UTYH-:-=C-(P(-).WWF3:))3(U))(W)() P'
           3P7Y3)/'XP:)WP(J. WXCWKV:)()))(W'U)()
           7OLY3',H9),YW'F ),W)CT)/Y((-))'W,U)()
           7F=T-/T(=)A3C,)3)(WA()=)TY(CY'YWY(::)
           W9C=()L/3,9'/('Y,YWU(XE/))()E.YT)3:)L
           W=P:F:(,)),,'F'/:WP+3OY':)(R+ /T,T')W
        -=WRHX9C9-W'=,),)'A,A)XW779EXWK+.()3W),(,
      ,W=-'L,,XX)/)+'I 3)39I(UHE-+LX39TWH/LUP)(H)
     ,P:. ,-90/,(F0'/:,W //'(YOC':--YY3/IRW'9LT')
     3W=:Y:-F.)Y:/''Y /O.=:,WL9) ,. ,.79=9PL'9(-W,
     WWWWWWWPT:,::/'-WH=9',P=-W3XU3-,W=YL-O3-O)X9WL
      -7T--''=9W==W=9WWHW====''P======='---=T==F==9)
Or try this silly piece of C code (author unknown).

Software

A Macintosh application has been written, called pict2ascii:, that converts PICT images into an ascii bitmap format. The numerical value for each pixel can be scaled to a number of ranges.
Update 2002, this software is no longer available.