python (argparse库)图片转字符画小工具

拷贝代码和图片在同一级目录下运行:

from PIL import Image
import  argparse

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

# 首先,构建命令行输入参数处理 ArgumentParser 实例
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
# 输出字符画的宽度
WIDTH = args.width
# 输出字符画的高度
HEIGHT = args.height
# 输出字符画的路径
OUTPUT = args.output
def get_char(r,g,b,alpha = 256):
    # 判断 alpha 值
    if alpha == 0:
        return ' '
    # 获取字符集的长度,这里为 70
    length = len(ascii_char)
    # 将 RGB 值转为灰度值 gray,灰度值范围为 0-255
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    # 灰度值范围为 0-255,而字符集只有 70
    # 需要进行如下处理才能将灰度值映射到指定的字符上
    unit = (256.0 + 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):
            # 将 (j,i) 坐标的 RGB 像素转为字符后添加到 txt 字符串
            txt += get_char(*im.getpixel((j,i)))
        # 遍历完一行后需要增加换行符
        txt += '\n'
    # 输出到屏幕
    print(txt)

    # 字符画输出到文件
    if OUTPUT:
        with open(OUTPUT,'w') as f:
            f.write(txt)
    else:
        with open("output.txt",'w') as f:
            f.write(txt)
                                $$$$                                       
                           $$d0x0o#uxx0z#$$                                 
                        $WcxxxxW   "kx}  "hd$                               
                      $qxxxxxxJ     "c     Wxd$                             
                    $#xxxxxxxch      #      cxu$                            
                   $uxxxxxxxxk>    p"-  h}  #xxxB                           
                 $0xxxxxxxxxx#    # n "h I# nxxxx$                          
                $Yxxxxxxxxxxx#    I  }C     -qcxxx$                         
               $Yxxxxxxxxxxxq#(      "-     z  -occ$                        
               $xxxxxxxxxxc#(Ip      ( COC( h    pu$                        
              $xxxxxxxxxuh    ">     n}p zk8"     "8$$$                     
              mxxxxxxxxk"      >C  ff &\  kk    }#>#   $                    
             $xxxxxxxx# -Cp}          ok\kkk> C(       "$                   
             cxxxxxxxW       }zh(     @kkkko >          $                   
            $xxxxxxxq             }h   8kko(            p                   
            mxxxxxxx>                    -    #pnf----I p                   
           $xxxxxxuW   >nn---I           O              $                   
           $xxxxxx#"              ->     p             I                    
           Wxxxxxx>                      n-   OhnI     $                    
           qxxxxx0     }&%%%pOn}I  ((    -n        }Oh$                     
           Jxxxxx#    "kkkkkkka8%*aW%pn- -n        }CI$                     
           Jxxxxxp    -kkkkkWB8akkkkkkoWBhp}I    >z#  $                     
           cxxxxx}    nk*%okkkkkkkkkkkkkkkkkkkkkkkk"  $                     
           Jxxxxx     nkkkkkkkkkkkkkkkkkkkkkkkkkkk%   $                     
           Jxxxxx     Ikkkkkkkkkkkkkkkkkkkkkkkkkkk-                         
           qxxxxx      akkkkkkkkkkkkkkkkkkkkkkkkkB   f                      
           Wxxxxx      8kkkaW%8#kkkkkkkkkkkkkkkkh"   8                      
           $xxxxx      Ik&YffffffQBhkkkkkkkkkkkkO   z$                      
           $xxxxx(      $ffffffffffx@kkkkkkkkkkB    $                       
            mxxxx#      "ufffffffffffbkkkkkkkk#    I                        
            $xxxxY       nffffffffffffMkkkkkka"    8                        
             uxxxxf       hffffffffffffWkkkka>    I                         
             qxxxx#       "Qfffffffffff%kkkkW     O                         
             $xxxxcp       "bffffffffffckkk8     "$                         
              dxxxxc         omfffffffffa8C      $                          
              $xxxxxW          CQffffffQz       8                           
               $xxxxx}           >hbpo(        8                            
                #xxxxY"      -(O%$}  IBkkkkkkkoB                            
                 0xxxx0 >O%*kkkkB      k#j>Ij#kk$                           
                 $Jxxm8akkkkoWW&"       Jwj1j0C($                           
                  $$okkk*&Lxxxxd        h_IIIIM $                           
                  $Wkh8qxxxxxxx#        OIIXbIX *                           
                   $mxxxxxxxxxxq        aII[wI# z                           
                    cxxxxxxxxxxxI       uIII\j  -                           
                    Jxxxxxxxxxxxp      fhIII_h  >                           
                    kxxxxxxxxxxx0p    n"  -(                                
                    $xxxxxxxxxJh  >p8#phpCnnnCppI$    $$$                   
                    $xxxxxxuWcx  pf             p$ $}    n$                 
                    $xxxJ#dxxx0  n              n$8       f                 
                     xxxxxxxxx#  p              z$         $                
                     Jxxxxxxxx#  O              h"         h                
                     kxxxxxxxx#   "            "8          O                
                     Bxxxxxxxxm   p            pI          p                
                 $$$ $xxxxxxxxxI   h         "O}           8                
                #kkk$$xxxxxxxxx8    "hn- --zO  $           $                
               $kkkk%$xxxxxxxxxJ      -npnn-  fh           $                
               $kkkkM$xxxxxxxxxxk            CxC          }                 
                akkk$$xxxxxxxxxxxq>         Wxxz          $                 
                $$$$ Bxxxxxxxxxxxxx8}    fhcxxxh         I                  
                     qxxxxxxxxxxxxxxxxJYxxxxxxxm         $                  
                     JxxxxxxxxxxxxxxxxxxxxxxxJd#(       h                   
                   $$xxxxxxxxxxxxxxxxxxxJW$$    $-     8                    
                  h" xxxxxxxxxxxxxxxxc@$          $pp$$                     
                 $   uxxxxxxxxxxxxx0$                                       
                 O   #xxxxxxxxxxxJ$                                         
                 >   >xxxxxxxxxu$                                           
                      Cxxxxxxuk$                                            
                       #xxxxx8$                                             
                        (ocJ$                                               
                 -          8                                               
                 O                                                          
                 $           $                                              
                  O          $                                              
                   $"       n                                               
                    $*I    p$                                               
                       $$$             
   if __name__ == '__main__': 
   含义:作为启动文件 python_.py ,该文件的内置属性 __name__ 等于 “__main__”,而.py 作为导入模块,该模块的 __name__ 等于文件名(也称模块名字)             

猜你喜欢

转载自blog.csdn.net/qq_15555275/article/details/107371341