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网络编程学习笔记(10):webpy框架
Jun 09 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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超级全局变量
2010/01/26 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
python递归全排列实现方法
2018/08/18 Python
Python中extend和append的区别讲解
2019/01/24 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Python3获取cookie常用三种方案
2020/10/05 Python
python 利用toapi库自动生成api
2020/10/19 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
资料员岗位职责
2013/11/17 职场文书
医学生个人求职信范文
2014/02/07 职场文书
学习作风建设心得体会
2014/10/22 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python