python图片字符画

how to generate a char picture.

1.install pillow.

2.import Image&&import argsparse.

argsparse is used for dealing with args,width,height.etc.

3.get_char() function

Our purpose is to get each pixel of the image and map it to a num and this num can be expressed by a char. We use gray to represent rgb. Here is func:

def get_char(r,g,b,alpha=256):
    if alpha==0:
        return ' '
    length=len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit=(256+1)/length
    return ascii_char[int(gray/unit)]

4.get each pixel and pass it to get_char()

for i in range(HEIGHT):
        for j in range(WIDTH):
            txt+=get_char(*im.getpixel((j,i)))
        txt+='\n'

5.write this pic to output.txt

with open('test.png','w') as f:
    f.write(txt)

Finally, we can get our expected picture!
Here is the source code:

#!. /usr/bin/env python3
#! -*- coding: utf-8 -*-
from PIL import Image
import argparse

parser=argparse.ArgumentParser()
parser.add_argument('file')
parser.add_argument('-o','--output')
parser.add_argument('--width',type=int,default=80)
parser.add_argument('--height',type=int,default=80)

args=parser.parse_args()

IMG=args.file
HEIGHT=args.height
WIDTH=args.width
OUTPUT=args.output

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

def get_char(r,g,b,alpha=256):
    if alpha==0:
        return ' '
    length=len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit=(256+1)/length
    return ascii_char[int(gray/unit)]

if __name__=='__main__':
    im=Image.open(IMG)
    im=im.resize((WIDTH,HEIGHT),Image.NEAREST)

    txt=""

    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt+=get_char(*im.getpixel((j,i)))
        txt+='\n'

    with open('output.txt','w') as f:
        f.write(txt)

Test
test.png
Output

                                 *******                                        
                               ***********                                      
                              ***       ***                                     
                             **.          **   *******                          
                            **             *******b*****                        
                           #*               **;       j**$                      
                           **               c           **                      
                     ***** *                             **                     
                   *********                              **                    
                 ****      *                              **                    
                ***                                        *                    
               o*p                                         **                   
               **                                          *****                
              **                                           ********             
              **                                           k    ?***            
            ***                                                    **#          
          ****0                                                     **          
         ***                                                         **         
        **                                                            **        
       **       $$$                                                   **        
       **     \$$$$$                                                  \*        
      **     '$    $$ $$$$j $$$                                        *        
      **     $      $Y$$$$$$$$$$                                       *        
      **    $$       $$$)$$    $$                                      *        
      *Y    $        $/))$      $@                                    p*        
      **   $$         $)$^      .$$                                   **        
      ** $$$q   $$$   $)$        $$$$                                 *         
      **$$$$   <$$$@  $$$        $$$$$                               *****      
      $$$))$   $$$$$  $$          $)\$$                             *******     
     $$$)))$   $$$$$  #$      $$$ $)))$$                          ,*h     **    
    $$p))))$   $$$$$   $     $$$$ $))))$$                                  **   
   $$))))))$   $$$$$   $     $$$$$$t))))$$                                  **  
  $$)))))))$   $$$$$  B$     $$$$$$$)))))$$                                 **  
 $$))))))))$    $$$   $$     $$$$$$$))))))$h                                 ** 
#$t))))))))$    +$h   $@     $$$$$h$))))))$$                                 ** 
$$)))))))))$          $$     $$$$ $$))))))$$                                  **
$$)))))))))$          $$     k$$$ $$))))))$$                                  **
$$)))))))))$          $$      f$  $0))))))$$                                  **
$$)))))))))$          $$          $))))))b$                                   **
$$)))))))))B$         $$          $))))))$$                                   **
 $$))))))))$$        $$$          $))))$$$                                    **
  $$))))))$$$Y       $)$8        k$$B$$$$                                     **
   $$$))n$$$$$      $$))$        $$$$$$                                       **
    $$$$$$ $|$$    `$)))$        $                                           i* 
     **8  x$))$$  $$))))m$      $m                                           ** 
      *** $$)))$$$$))))))$$    $$                                   *        ** 
       ***$$))))))))))))))$$  $$                                    **!     **  
         *$))))))))))))))))h$$b                                     *o***|***   
         $$))))))))))))))))))$                                      *))*****    
         $$))))))))))))))))))$                                     **))$$       
         $$))))))))))))))))))$$                                    **))$$       
         $))))))))))))))))))p$$$                                  **)))Q$       
         $))))))))))))))))))$$z$$                                **$))))$       
        $$))))))))))))))))))$Czz$$                     *       *** $))))$       
        $$))))))))))))))))))$zzzz$]                    **********  $))))$       
        $$))))))))))))))))))$zzzz$$                    *)******    $\)))$$      
        $$))))))))))))))))))$zzzz$$                   **)))$$      $$)))$$      
        $W))))))))))))))))))$zzzz$$   *               **)))$$      $$)))%$      
        $X))))))))))))))))))$zzz$$   **p             **$)))$$      $$))))$      
        $v)))))))))))))))))$$zz$$@  ****t           **$$)))$$      $$))))$      
        $o)))))))))))))))))$$$$$@ o**  ***         ***$$)))M$       $))))$      
        $$)))))))))))))))))$$$$*****    ****)   ****  $$)))Q$       $))))$$     
        $$)))))))))))))))))$******)$      ********o   $$)))|$       $))))$$     
         $C)))$$)))$o)))))$$ $$))))$       $X)))$$    $$))))$       $q)))$$     
         $$))))))))))))))%$@ $$))))$       $#)))Y$    $$))))$       $$$$$$$     
          $$j)))))))))))$$$  $#)))/$       $$))))$    $$$$m)$       $$$$        
           $$$()))))))$$$$   $/)))m$       $$))))$    $$$$$$$       $           
            @$$$$$$$$$$$     $))))$$       $$))))$                              
               $$$$$$B       $))))$$       $$))))$                              
                             $))))$$       $$))))$$                             
                             $))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$))))$$       $$))))$$                             
                            $$$$))$$        $))$$$$                             
                            $$$$$$$$        $$$$$$$                             
                                 $$$        $$                                  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值