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实现备份文件实例
Sep 16 Python
Python中random模块用法实例分析
May 19 Python
浅析Python编写函数装饰器
Mar 18 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
python如何定义带参数的装饰器
Mar 20 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
Python基础知识点 初识Python.md
May 14 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Python 矩阵转置的几种方法小结
Dec 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 EOT定界符的使用详解
2008/09/30 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
经典c++面试题四
2015/05/14 面试题
党校学习思想汇报
2014/01/06 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
2014年团委工作总结
2014/11/13 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技