转自:https://blog.csdn.net/mm1030533738/article/details/78447714

项目链接: https://www.shiyanlou.com/courses/370/labs/1191/document


from PIL import Image   #从PIL模块中引入Image这个类
import argparse   #引入argparse这个模块(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的列表,让图片上的灰度与字符相对应

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

#将256灰度映射到70个字符上

def get_char(r,g,b,alpha = 256):   #这个调用跟im.getpixel函数有关,这个函数是根据图片的横纵坐标,把图片解析成

                  #r,g,b,alpha(灰度)

  if alpha == 0:  #如果灰度是0,则说明这里没有图片
  return ' '
  length = len(ascii_char)  #计算这些字符的长度
  gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)  #把这些图片的RGB值转换成灰度值
  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)))  #把图片按照横纵坐标解析成RGBAlpha这几个参数,然后调用get_char

                        #函数,把对应的图片转换成灰度值,把对应值的字符存入txt中
      txt += '\n'
    print(txt)  #在界面打印txt文件

  if OUTPUT:
    with open(OUTPUT,'w') as f:  #文件输出
    f.write(txt)
  else:
    with open("xx.txt",'w') as f:  #文件输出
    f.write(txt)

python学习---50行代码实现图片转字符画1的更多相关文章

  1. python学习---50行代码实现图片转字符画2

    from PIL import Image codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<> ...

  2. [笔记] Python 图片转字符画

    一.介绍 用Python 代码完成图片转字符画 二.python 环境 Python 3.6.6 pillow 5.1.0  Python 图像处理库, 需要另外安装 三.原理 gray = 0.21 ...

  3. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  4. 50行代码实现python计算器主要功能

    实现功能:计算带有括号和四则运算的式子   3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层 ...

  5. HTML5游戏实战(1):50行代码实现正面跑酷游戏

    前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...

  6. 50行代码实现GAN | 干货演练

    2014年,Ian Goodfellow和他的同事发表了一篇论文,向世界介绍了生成对抗网络(GAN).通过对计算图和博弈论的创新性组合,他们表明如果有足够的建模能力,两个相互对抗的模型可以通过普通的反 ...

  7. Python 图片转字符画 学习笔记

    Python 图片转字符画 学习笔记 标签(空格分隔): Python 声明:此文章和所有代码是学习笔记,非原创,原文教程地址:https://www.shiyanlou.com/courses/37 ...

  8. 50行代码实现缓存,JAVA内存模型原理

    遇见这样的高人怎么办??下面是一个简单缓存的实现,相当牛叉!自己看吧,只有50行代码. 摘自:http://www.oschina.net/code/snippet_55577_3887 import ...

  9. Python 图片转字符画

    Python 图片转字符画 一.课程介绍 1. 课程来源 原创 2. 内容简介 本课程讲述怎样使用 Python 将图片转为字符画 3. 前置课程 Python编程语言 Linux 基础入门(新版) ...

随机推荐

  1. sql server isnull函数

    isnull函数 --ISNULL() 函数用于规定如何处理 NULL 值 语法:SELECT ISNULL(check_expression, replacement_value) --check_ ...

  2. luogu P3826 [NOI2017]蔬菜

    luogu 那个第一次购买有\(s_i\)奖励,可以看成是多一种蔬菜\(i+n\),权值为\(w_i+s_i\),每天减少量\(x\)为0个,保质期\(\lceil\frac{c_i}{x_i}\rc ...

  3. 如何使用sftp下载Linux服务器上的文件到本地

    下载Linux服务器上的文件到本地 Linux服务器上的操作 sftp xxxxx@jumper.xxxx.com 使用put命令进行文件上传,put app.log 本地操作 sftp xxxxx@ ...

  4. 网速监控-nload

    用来监控系统网卡实时网速的. 安装 yum install nload -y # 或 apt install nload -y 使用 # 直接运行默认监控第一个网卡, 使用上下方向键来切换网卡. nl ...

  5. 18 Python之初识面向对象

    1. 类与对象 class Car: #类名首字母大写,严格遵守驼峰命名规范 pass #造车 c = Car() #类名() #创建对象 ##出场之后进行改装 c.color = "红色& ...

  6. Axure(二)

    回顾1.Axure    动态面板        图片转换        画面滚动2.使用元件  -->  page box  盒子 width                 height   ...

  7. SuperMap webgl对接iportal托管的三维服务

    在webgl中对接iportal加密的三维服务时,需要提前注册key值.Cesium.Credential.CREDENTIAL = new Cesium.Credential("你的key ...

  8. linux 之实现定时任务

    一.方式一 (1)命令行 的方法: 一.方式一 需求:每分钟执行一次/etc 目录的添加 到/tmp/a.txt 中 (1) touch a.txt创建文件 (2) crotab -e 进行任务的定制 ...

  9. QQ恶搞 - 让艾特你的人语无伦次

    效果图: 实现过程: 代码: ‮ 将上面的代码复制添加到你的群名片后面即可. 原理解析: 这个代码是一个Unicode控制字符 - RLO,它可以控制在它后面的所有文本都已倒序的方式显示.在qq群艾特 ...

  10. 数据库 (二):MySQL密码策略与用户管理

    为了加强安全性,MySQL5.7为root用户随机生成了一个密码可通过# grep "password" /var/log/mysqld.log 命令获取MySQL的临时密码用该密 ...