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字符串处理函数简明总结
Apr 13 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
Python数据类型详解(二)列表
May 08 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
Python使用googletrans报错的解决方法
Sep 25 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
python解析yaml文件过程详解
Aug 30 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
Python基于template实现字符串替换
Nov 27 Python
python中pycryto实现数据加密
Apr 29 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
怎样在php中使用PDF文档功能
2006/10/09 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP基本语法总结
2014/09/06 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
Js组件的一些写法
2010/09/10 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
教师简历自我评价
2014/02/03 职场文书
初中家长寄语
2014/04/02 职场文书
住房抵押登记委托书
2014/09/27 职场文书
爱国主义主题班会
2015/08/14 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
python自动化八大定位元素讲解
2021/07/09 Python