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 ljust rjust center输出
Sep 06 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
python数据挖掘需要学的内容
Jun 23 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
Python @property及getter setter原理详解
Mar 31 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
浅谈Python基础之列表那些事儿
May 11 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中文件下载功能实现超详细流程分析
2012/06/13 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
从vue源码看props的用法
2019/01/09 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
对python中return与yield的区别详解
2020/03/12 Python
python实现简单学生信息管理系统
2020/04/09 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
车祸赔偿收入证明
2014/01/09 职场文书
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技