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实现根据主机名字获得所有ip地址的方法
Jun 28 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python字典一键多值实例代码分享
Jun 14 Python
numpy中的meshgrid函数的使用
Jul 31 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
Python常用库大全及简要说明
Jan 17 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
python基础之停用词过滤详解
Apr 21 Python
Python 数据可视化之Bokeh详解
Nov 02 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/13 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
Angular工具方法学习
2016/12/26 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
python求crc32值的方法
2014/10/05 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
python将unicode转为str的方法
2017/06/21 Python
python绘制简单折线图代码示例
2017/12/19 Python
python实现Zabbix-API监控
2018/09/17 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
大学毕业生自我鉴定
2013/11/05 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
毕业生政审意见范文
2015/06/04 职场文书
邹越演讲观后感
2015/06/15 职场文书
小组口号霸气押韵
2015/12/24 职场文书
推普标语口号大全
2015/12/26 职场文书
党员理论学习心得体会
2016/01/21 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android