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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
零基础写python爬虫之urllib2使用指南
Nov 05 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
Apr 26 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 Python
序列化Python对象的方法
Aug 01 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php商品对比功能代码分享
2015/09/24 PHP
php源码的使用方法讲解
2019/09/26 PHP
js 调用父窗口的具体实现代码
2013/07/15 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
javascript arguments使用示例
2014/12/16 Javascript
详谈javascript异步编程
2016/02/21 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Python中的面向对象编程详解(下)
2015/04/13 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
python名片管理系统开发
2020/06/18 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
专业技术职务聘任书
2014/03/29 职场文书
会计人员演讲稿
2014/09/11 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2015年新学期寄语
2015/02/26 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
2019公司管理制度
2019/04/19 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android