1、创建ascii.py

2、

下面是 ascii.py 的完整代码:

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
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") # 将256灰度映射到70个字符上
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.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):
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)

然后,我们还要下载用来测试的图片:

$ wget http://labfile.oss.aliyuncs.com/courses/370/ascii_dora.png

最后,使用刚刚编写的 ascii.py 来将下载的 ascii_dora.png 转换成字符画。

$ python3 ascii.py ascii_dora.png

然后使用 vim 打开 output.txt 文件:

$ vim output.txt



最新文章

  1. MySQL 日期时间相关函数整理
  2. UVA1003(dfs+进制转换)
  3. C# 站点IP访问频率限制 针对单个站点
  4. NYOJ 128 前缀式计算
  5. 碰到sshd连接不上linux时的解决办法
  6. TCP三次握手连接与四次握手断开
  7. HTML5外包团队——技术分享:HTML5判断设备在线离线及监听网络状态变化例子
  8. ApplePay扩大全球发卡行合作,“苹果税”撑不住了?
  9. [原创,分享]DbHelper 续
  10. oldboy第五天学习
  11. UITableView 小节-备
  12. onclick事件
  13. 对spring,struts,hibernate及MVC的理解
  14. 利用Java泛型实现简单的泛型方法
  15. Android P添加一个可以让system_server进程访问的hal service需要改动的sepolicy文件
  16. 《深入java虚拟机》读书笔记之Java内存区域
  17. 测试覆盖率工具EclEmma安装与使用
  18. hibernate validation内置注解及自定义注解
  19. [工具类] 读取解析json文件
  20. 小程序循环多个picker选择器,实现动态增、减

热门文章

  1. 异常--finally关键字
  2. 【English】20190308
  3. [JS]js中判断变量类型函数typeof的用法汇总[转]
  4. Scrapy 框架 使用 selenium 爬取动态加载内容
  5. C#编程の泛型编程
  6. Rancher学习笔记-----1.分享链接
  7. UVA1442-Cav(扫描法)
  8. Quartz 的DisallowConcurrentExecution
  9. 【转】iOS开发笔记--识别单击还是双击
  10. redis配置环境变量