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 ljust rjust center输出
Sep 06 Python
python使用cPickle模块序列化实例
Sep 25 Python
python修改注册表终止360进程实例
Oct 13 Python
Python读大数据txt
Mar 28 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
用python实现k近邻算法的示例代码
Sep 06 Python
python__name__原理及用法详解
Nov 02 Python
Python txt文件如何转换成字典
Nov 03 Python
python 对xml解析的示例
Feb 27 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
无线电广播的开始
2002/01/30 无线电
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
聊天室php&amp;mysql(六)
2006/10/09 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python中的Matplotlib模块入门教程
2015/04/15 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
后勤副校长自我鉴定
2013/10/13 职场文书
公司董事长职责
2013/12/12 职场文书
经典演讲稿汇总
2014/05/19 职场文书
工程承包协议书
2014/10/20 职场文书
房产公证书
2015/01/23 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python