首先要明确思路, 图片是由像素组成的, 不同的像素有不同的颜色(rgb), 那么既然我们要转化为字符画, 最直接的办法就是利用字符串来替代像素, 也就是用不同的字符串来代表不同的像素. 另外图片一般来讲是彩色的, 而acsii(一般打印在终端上吧) 都是黑白的, 此时就要介绍另外一个概念了 :

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像.

到这里思路就很明确了, 我们要做的就是两件事 :

1. 将每一个像素点(彩色图片用rgb)映射到每一个灰度值...

2. 将灰度值映射到每一个字符串...

所以我们还需要从像素点的rgb到灰度值的转换公式 :  灰度值 = 0.2126 * r + 0.7152 * g + 0.0722 * b.

代码如下 :

 1 from PIL import Image
 2
 3 ascii_chars = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")   #用来替代像素的字符集合...
 4
 5 def get_chars(r, g, b, alpha = 256):
 6     global ascii_chars
 7     if alpha == 0:
 8         return ' '
 9     length = len(ascii_chars)
10     gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
11     unit = alpha / length                 #将256个像素均分给字符...
12     return ascii_chars[int(gray/unit)]
13
14
15
16 imagePath = "/Users/zhangzhimin/ascii_dora.png"
17 outPutHeight = 70
18 outPutWidth = 100
19
20
21 img = Image.open(imagePath)
22 img = img.resize((outPutWidth, outPutHeight))
23
24
25 txt = ""
26 for y in range(outPutHeight):
27     for x in range(outPutWidth):
28         txt += get_chars(*img.getpixel((x, y)))
29     txt += '\n'
30
31 print(txt)

效果大概是这样的 :

值得一提的是只对一些层次简单的图形会有很好的效果, 如果想要解析复杂的图片建议增加字符串的个数以及显示屏的大小...

感谢实验楼提供这样一个有趣的编程练习...

转载于:https://www.cnblogs.com/nzhl/p/5599346.html

图片处理拓展篇 : 图片转字符画(ascii)相关推荐

  1. golang实现图片颜色反转、图片灰度、缩放、转为字符画

    看到网上很多通过字符形成的画,觉得很好玩,于是网上搜索了下原来叫字符画. 见百度百科:https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E7%94%BB/ ...

  2. 字符画——ASCII art

    首先先推荐几个生成字符画的网址 http://www.topster.de/zh/text-to-ascii/ https://linux.cn/article-3405-1.html     五个超 ...

  3. python 图片转字符画

    python 图片转字符画 项目介绍 本实验用 50 行 Python 代码完成图片转字符画小工具.通过本实验将学习到 Linux 命令行操作,Python 基础,pillow 库的使用,argpar ...

  4. python动态图片转字符画_GIF动态图,视频?都能用Python转换成字符画图像

    字符画是一种由字母.标点或其他字符组成的图画,它产生于互联网时代,在聊天软件中使用较多,本文我们看一下如何将自己喜欢的图片转成字符画. 静态图片 首先,我们来演示将静态图片转为字符画,功能实现主要用到 ...

  5. python动态图片转字符画_使用python实现一个将图片转换成字符画的功能

    使用python实现一个将图片转换成字符画的功能 发布时间:2020-11-05 16:01:25 来源:亿速云 阅读:97 使用python实现一个将图片转换成字符画的功能?针对这个问题,这篇文章详 ...

  6. python学习之手把手教你将图片变成黑白或彩色字符画(骚操作)

    文章目录 前言 一.字符画的实现原理 二.黑白字符画实现代码 三.彩色字符画生成 代码实现: 总结 前言 字符画这个话题,似乎早在贴吧时代就已经被玩烂了.在百度图片随便一搜索,就能够看到非常多.然后在 ...

  7. 教你用Python将图片转化为字符画!附源代码

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 Whatever you are facing today, remem ...

  8. 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解

    本篇文章主要介绍了Python实现图片转字符画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画. 但是像 ...

  9. Python3,为了给女神暗送秋波,我默默的写了一个图片字符画生成器,真香。

    图片字符画制作 1.引言 2.代码实战 2.1 原理 2.2 实例 3.总结 1.引言 小屌丝:鱼哥,给你看个照片. 小鱼:什么-照片-首先声明,我可是正经人. 小屌丝:你先看看. 小鱼:就这,有啥好 ...

最新文章

  1. 字符串插入_动态规划----字符串编辑最小距离
  2. 雷神开机logo更改_雷神911 pro-钛空版开售,陪你过一个不一样的520
  3. intimidated
  4. mysql 定期备份_MySQL定时备份(全量备份+增量备份)
  5. 浓郁东方民俗剪纸风新年春节海报,psd分层模板
  6. 服务器间 存活状态,Shell脚本监控LVS后台服务器存活状态
  7. 大数据平台组件布置 与 进程查看
  8. 批量修改文件名称的方法
  9. 如何从型号识别ALTERA的Cyclone IV系列FPGA所包含的信息
  10. 人工智能产品经理如何面对数据挖掘
  11. 三.修改Jenkins插件下载路径
  12. 天才AI少年范浩强坚信“弄斧要到班门”
  13. 【LeetCode】把数字翻译成字符串最长不含重复字符的子字符串
  14. 第七章 NoSQL数据库技术(二)
  15. 一套ASP.NET优惠券领取微信小程序源码(前台+后台)
  16. 安全、可靠、合规,华为云守护企业网站安全
  17. 最小二乘拟合(矩阵)
  18. 【CodeForces】CF3B Lorry
  19. 我肝了long long time 的笔记(别白嫖啊)
  20. 映恩生物Duality Biologics完成9000万美元B轮融资

热门文章

  1. 【牛客 - 297C】little w and Segment Coverage(差分数组,区间差分,思维,卡线段树)☆
  2. 动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位
  3. 吴恩达机器学习作业(1):线性回归
  4. quartz mysql索引_分布式系统中的定时任务全解(二)
  5. oracle如何把字符集改回默认,更改oracle字符集
  6. java gc回收机制种类_JAVA的垃圾回收机制(GC)
  7. UNIX(多线程):27---多线程并发之原子操作与无锁编程
  8. C++:18---const关键字(附常量指针、指针常量、常量指针常量)
  9. java 最大公约数和最小公倍数
  10. C++ primer 第11章 关联容器