Python实现图片转字符画的示例代码


Posted in Python onAugust 21, 2017

初学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()

原图

Python实现图片转字符画的示例代码

转换为字符画(注:在记事本打开时记得取消自动换行,下图字体:宋体 字号:小六)

Python实现图片转字符画的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中使用enumerate函数遍历元素实例
Jun 16 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
python http基本验证方法
Dec 26 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
Python下简易的单例模式详解
Apr 08 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
python 实现mysql自动增删分区的方法
Apr 01 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 #Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 #Python
Python编程之微信推送模板消息功能示例
Aug 21 #Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 #Python
virtualenv实现多个版本Python共存
Aug 21 #Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 #Python
python 垃圾收集机制的实例详解
Aug 20 #Python
You might like
Snoopy类使用小例子
2008/04/15 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JS变量及其作用域
2017/03/29 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
jQuery实现简单飞机大战
2020/07/05 jQuery
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
python 字典中取值的两种方法小结
2018/08/02 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
python 错误处理 assert详解
2020/04/20 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
python cookie反爬处理的实现
2020/11/01 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
文明餐桌行动实施方案
2014/02/19 职场文书
学习决心书
2014/03/11 职场文书
公司请假条格式
2014/04/11 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
创业培训计划书
2014/05/03 职场文书
简单的辞职信模板
2015/05/12 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js