Python写个简单的字符画转换程序

大家一定玩过这样的游戏,特别是写邮件聊QQ的时候,如 ^_^ 来表示笑脸。如果复杂一点,有办法吗?

如:这样的一张图:
这里写图片描述

`

                                                                  @@@*                             -@@ @*                                                   
                                                                 @@   @@       -@@@@@@@@@@@*      @@@- .@                                                   
                                                                 @@*@.  @@@@@@       -@@@@@*-*@@@@@     @-                                                  
                                                                 -@   @@@-        *@@              @@@  @-                                                  
                                                                  @@@@          .@*                   @@@                                                   
                                                  @@@@@@@@@@@@@@@@@@            @@                      .@@                                                 
                                                @@             -@@              @-                        .@@@@@*-    -*@@@                                 
                                              -@     -@@@@@@  @@                @@                          -@.            @@                               
                                              *@           .@@                   @@                           @@ -**-       *@                              
                                               @@          @*             @*      *@*                          @@            @*                             
                                                @@       .@*            @@@@@       *@@           @@@@          @@           @.                             
                                                  @@.   @@               @  *          *@@.      -@ @@-          @@-    .-@@@*                              
                                                    *@@@@         -*@@@@@@@@@@@@@@@@@@@@@@@@@@@   .@@-            @*  .                                     
                                                      @@   -@@@@*.                            -*@@@@@@@*          @@                                        
                                                     .@@@@@                                             .*@@@@-    @*                                       
                                                    .@@*                                                       .@@@@@                                       
        .@@*                               -*@@@@@@@@.                                                              @@@-                                    
         @.@@@-                     -@@@@@.       @@                                                                   .@@                                  
         @    @@                .@@@             *@.                                                                      @@                                
        -@     @@             @@@               @@                                                                          @@                              
        @.     .@           @@.                *@                                                       @@@@@@@              *@                             
       -@      @@          @@                  @.                   @@@@@.                            .@@     @@.             @@                            
        @-   *@@         .@@*                 @@                  @@*   @@@-                          @@       @@.             @*                           
         @@@@@@         -@@@                  @@                .@@       @@                          @@        @@             -@                           
              @@        @* @.                 @*                @@         @@                         @@        @@              @                           
                @@@@*@@@@  *@                 @.                @@         @@                         @@.      *@-              @                           
                      .@    @@*.              @.                .@@       @@.                          @@@    @@*              -@                           
                      -@      .*@@@@@@@       @-                 .@@.   -@@*                            .@@@@@@.               @@                           
                      @@             @@       @*                   -@@@@@*                                                     @                            
                      @@            -@        @@                                                                              @@                            
                      @@            *@        @@                                                                              @@                            
                      @@@@@@@@      .@        .@                                                                             @@                             
                      -@     .@*     @@        -@.                                                                          @@                              
                       @      *@      @@-      .@@*                                                                        @@                               
                       @*      @.       -@@@@@@*  @@@                                                                     @@                                
                       .@     .@                    *@@@                                                               @@@                                  
                        @@    @@                        @@@@.                                                     -@@@@                                     
                        -@-*@@-                             *@@@@@@-                                   .-@@@@@@@@@@@                                        
                         @@.                                        -@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@*.          @@                                        
                          @*                                                                                      @-                                        
                          -@                                                                                      @-                                        
                           .@.                                                                                   -@                                         
                            *@                                                                                   *@                                         
                             .@                                                                                  @@                                         
                              -@                                                                                 @                                          
                                @*                                                                              @@                                          
                                 @@                                                -@@@@*-.-*@@@-               @@                                          
                                  @@                                              @@            -@@            .@.                                          
                                    @@                  .-@@@@@@@@@@*             @@              @@           @-                                           
                                     -@.         -@@@@@*.            @@@          @@               @*         @@                                            
                                       *@     .@@*                     -@*        *@               @@       @@                                              
                                         -@@@@@.                         @@-      *@                @@..@@@*                                                
                                                                           @@*    @@                                                                        
                                                                              .-*-                                                                          

`

使用python,可以在100行代码里解决问题:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 读入一张画,输出一个字符组成的字符画

# 需要用到的类库有:
# 1. pillow。可以使用pip install pillow
# http://pillow.readthedocs.io/en/latest/handbook/tutorial.html

# 灰度值 = 0.2126 * r + 0.7152 * g + 0.0722 * b

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=160)
#输出字符画高
parser.add_argument('--height', type=int, default=60)

#获取参数
args = parser.parse_args()

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

ascii_char = list("@*-. ")


# 将256灰度映射到ascii_char个字符上
def get_char(r, b, g, alpha=256):
    if alpha == 0:
        return ' '
    length = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)

    unit = (256.0 + 1)/length
    return ascii_char[int(gray/unit)]

# 在cmd 中直接运行.py文件,则__name__的值是'__main__';
# 而在import 一个.py文件后,__name__的值就不是'__main__'了;
# 从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件
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'

    print txt

    #字符画输出到文件
    if OUTPUT:
        with open(OUTPUT, 'w') as f:
            f.write(txt)
    else:
        with open("output.txt", 'w') as f:
            f.write(txt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值