python实现图片转字符画的完整代码


Posted in Python onFebruary 21, 2021

前言

最初是在实验楼看到的一个小实验

实验楼-Python 图片转字符画

原文是需要通过命令行运行程序

这里改为直接运行,需要固定一些参数

运行平台: Windows

Python版本: Python3.6

IDE: Sublime Text

1、实验准备

pillow库的安装

pip install pillow

2、实验原理

字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

最终显示的是黑白色的字符画,那么彩色的图片怎么转换成黑白的呢?这里就需要了解灰度值的概念了。

<span style="font-size:16px;">灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像。</span>

我们利用下面的公式将像素的RGB值转换成灰度值:

<span style="color:#ff0000;">gray = 0.2126 * r + 0.7152 * g + 0.0722 * b</span>

用不同的字符代表不同的灰度值,字符的种类和数量可以根据自己需要的效果进行调整,最好从前往后可以看到明显的变化,最后一个字符为空格符最佳:

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

3、完整代码

#-*- coding:utf-8 -*- 
from PIL import Image 
 
IMG='D:\Code\python\\test1\\ascii_dora.png' 
 
WIDTH=60 
HEIGHT=45 
 
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") 
 
#将256灰度映射到70个字符上 
def get_char(r,g,b,alpha=256):#alpha透明度 
 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) 
 #写入文件
 with open("output.txt",'w') as f: 
  f.write(txt)

4、结果

python实现图片转字符画的完整代码

总结

到此这篇关于python实现图片转字符画的文章就介绍到这了,更多相关python图片转字符画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中的sort方法使用详解
Jul 25 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
python ddt实现数据驱动
Mar 14 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python实现操作文件(文件夹)
Oct 31 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
python几种常用功能实现代码实例
Dec 25 Python
如何教少儿学习Python编程
Jul 10 Python
浅谈python出错时traceback的解读
Jul 15 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
python开发飞机大战游戏
Jul 15 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 #Python
Scrapy实现模拟登录的示例代码
Feb 21 #Python
scrapy-splash简单使用详解
Feb 21 #Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 #Python
利用Python如何画一颗心、小人发射爱心
Feb 21 #Python
python 第三方库paramiko的常用方式
Feb 20 #Python
Python中Qslider控件实操详解
Feb 20 #Python
You might like
php定时执行任务设置详解
2015/02/06 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
JQuery小知识
2010/10/15 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
图解javascript作用域链
2019/05/27 Javascript
python生成式的send()方法(详解)
2017/05/08 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
python画环形图的方法
2020/03/25 Python
python交互模式基础知识点学习
2020/06/18 Python
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
好的自荐信的要求
2013/10/30 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
运动会方阵口号
2014/06/07 职场文书
委托书的格式
2014/08/01 职场文书
建筑横幅标语
2014/10/09 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015年导购员工作总结
2015/04/25 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers