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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python实现逻辑回归的方法示例
May 02 Python
Python实现的生成格雷码功能示例
Jan 24 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
python实现点对点聊天程序
Jul 28 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
flask-restful使用总结
Dec 04 Python
python文件写入write()的操作
May 14 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
python数据类型可变不可变知识点总结
Mar 06 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
在centos7中分布式部署pyspider
2017/05/03 Python
python matplotlib画图实例代码分享
2017/12/27 Python
简单实现Python爬取网络图片
2018/04/01 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
Python流程控制 if else实现解析
2019/09/02 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
学习党课思想汇报
2013/12/29 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
体育教师求职信
2014/05/24 职场文书
大专毕业生求职信
2014/07/05 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
选购到合适的激光打印机
2022/04/21 数码科技