Python实现图片转字符画的示例代码
作者:萧十一的技术小站 时间:2021-07-13 19:21:03
初学Python,在网上看到Python图片转字符画的教程,我也来尝试下。
首先我们要用到Python的PIL库的Image模块,PIL(Python Imaging Library)库是Python的一个图像处理库。想了解PIL的详细功能介绍,可参考PIL的官方文档(虽然我也没看过,不过还是贴上来):http://effbot.org/imagingbook/
图片转字符画的关键思想是将图片的灰度值与你自己设定的字符集之间建立映射关系,不同区间的灰度值对应不同的字符,之后将图片每一个像素对应的字符打印出来就是我们要的字符画啦~
这里提供两种方法:
先将彩 * 片转换为黑白图片,然后直接将每个像素点的灰度值与字符集建立映射。
获取图片的RGB值,利用公式:
Gray = R*0.299 + G*0.587 + B*0.114
计算可得每个像素点的灰度值,之后再建立映射即可。
# -*- coding: utf-8 -*-
from PIL import Image
codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''#生成字符画所需的字符集
count = len(codeLib)
def transform1(image_file):
image_file = image_file.convert("L")#转换为黑白图片,参数"L"表示黑白模式
codePic = ''
for h in range(0,image_file.size[1]): #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向
for w in range(0,image_file.size[0]):
gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组
codePic = codePic + codeLib[int(((count-1)*gray)/256)]#建立灰度与字符集的映射
codePic = codePic+'\r\n'
return codePic
def transform2(image_file):
codePic = ''
for h in range(0,image_file.size[1]):
for w in range(0,image_file.size[0]):
g,r,b = image_file.getpixel((w,h))
gray = int(r* 0.299+g* 0.587+b* 0.114)
codePic = codePic + codeLib[int(((count-1)*gray)/256)]
codePic = codePic+'\r\n'
return codePic
fp = open(u'暴走.jpg','rb')
image_file = Image.open(fp)
image_file=image_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小
print u'Info:',image_file.size[0],' ',image_file.size[1],' ',count
tmp = open('tmp.txt','w')
tmp.write(transform1(image_file))
tmp.close()
原图
转换为字符画(注:在记事本打开时记得取消自动换行,下图字体:宋体 字号:小六)
来源:http://blog.csdn.net/wait_nothing_alone/article/details/52901531
标签:python,字符画
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python文件和目录操作方法大全(含实例)
2021-11-11 14:10:29
归纳万恶IE6的HACK方法
2010-02-04 17:17:00
SQL Server实现分布式数据库系统的终极目标
2010-08-05 14:57:00
如何解决ORA-01843与NLS_DATE_FORMAT问题
2023-06-30 20:57:14
php 多继承的几种常见实现方法示例
2023-11-22 19:03:19
python实现发送和获取手机短信验证码
2023-08-09 08:02:26
用python写扫雷游戏实例代码分享
2023-03-31 05:12:38
python腾讯语音合成实现过程解析
2022-01-01 20:58:05
plsql和tsql常用函数比对
2009-09-13 17:50:00
获取Dom元素的X/Y坐标
2009-10-10 12:49:00
![](https://img.aspxhome.com/file/UploadPic/200910/10/123-57s.gif)
python中出现invalid syntax报错的几种原因分析
2023-01-26 22:01:24
JavaScript入门学习书籍的阶段选择
2008-01-11 19:39:00
Python+matplotlib实现折线图的美化
2023-09-05 20:03:18
![](https://img.aspxhome.com/file/2023/0/87750_0s.png)
在 Python 中如何将天数添加到日期
2023-02-09 03:34:30
Python生成随机数的方法详解(最全)
2023-05-04 12:36:08
![](https://img.aspxhome.com/file/2023/5/71355_0s.png)
Python中的“_args”和“__kwargs”用法详解
2023-03-11 02:10:38
SQL Server连接中经常出现的3个常见错误与解答
2010-07-26 14:25:00
Django学习笔记之ORM基础教程
2022-07-25 22:59:07
![](https://img.aspxhome.com/file/2023/2/78722_0s.png)
Python 通配符删除文件的实例
2022-04-24 03:00:22
Pytorch 中net.train 和 net.eval的使用说明
2021-11-15 11:40:37