转自: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. java实现spark常用算子之filter

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  2. 15 Python之内置函数

    思维导图: https://www.processon.com/mindmap/5c10cb5ee4b0090a2c9db92f 1. 匿名函数统一的名字是:<lambda> 使用场景: ...

  3. Vue项目里添加特殊字体或 某些字体乱码的问题

    问题:有个西藏的项目因使用藏文,而出现乱码 (一开始不乱的,不知道后台怎么处理...后来不知道为啥,前端乱码了) 解决:字体ttf 格式已下载,在项目中全局引入了 @font-face { font- ...

  4. Linux操作系统的常用命令(一)

    一.写随笔的原因:上次提到centos7.3安装mysql5.7的一些步骤,恰巧最近面试有碰到一些问LInux操作的常用操作的问题,想通过这篇文章MARK一下,不一定能够全,只是用的比较多的吧(lin ...

  5. PHP7安装redis扩展

    PHP7安装redis扩展优秀开源项目:http://github.crmeb.net/u/liaofeiyum -y install git git clone https://github.com ...

  6. 隔离技术线程池(ThreadPool)和信号量(semaphore)

    一.首先要明白Semaphore和线程池各自是干什么? 信号量Semaphore是一个并发工具类,用来控制可同时并发的线程数,其内部维护了一组虚拟许可,通过构造器指定许可的数量,每次线程执行操作时先通 ...

  7. 高性能mysql 附录D explain执行计划详解

    EXPLAIN: extended关键字:在explain后使用extended关键字,可以显示filtered列和warning信息.在较旧的MySQL版本中,扩展信息是使用EXPLAIN EXTE ...

  8. Mysql 查看连接数,状态及最大并发数(转载)

    -- show variables like '%max_connections%'; 查看最大连接数 set global max_connections=1000 重新设置   mysql> ...

  9. STM32CubeIDE查看内存使用情况

    按照下图操作 在右下角即可显示

  10. 【CF160E】Buses and People

    题目大意:给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a<a', b'<b, c'<c 的最小 c 对应的元组编号. ...