python实现图片转字符画的完整代码
前言
最初是在实验楼看到的一个小实验
原文是需要通过命令行运行程序
这里改为直接运行,需要固定一些参数
运行平台: Windows
Python版本: Python3.6
IDE: Sublime Text
1、实验准备
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、完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #-*- 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图片转字符画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Python Paramiko实现SSHv2协议轻松管理远程服务器
这篇文章主要为大家介绍了Python Paramiko实现SSHv2协议轻松管理远程服务器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-01-01Python实现SqlServer查询结果并写入多个Sheet页的方法详解
这篇文章主要为大家整理了两个Python实现SqlServer查询结果并写入多个Sheet页的方法,文中的示例代码讲解详细,感兴趣的可以了解一下2022-12-12django-rest-swagger对API接口注释的方法
今天小编就为大家分享一篇django-rest-swagger对API接口注释的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-08-08
最新评论