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 相关文章推荐
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python面向对象编程基础解析(二)
Oct 26 Python
python实现报表自动化详解
Nov 16 Python
基于python神经卷积网络的人脸识别
May 24 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
python实现诗歌游戏(类继承)
Feb 26 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
python excel多行合并的方法
Dec 09 Python
Python 随机按键模拟2小时
Dec 30 Python
pytest进阶教程之fixture函数详解
Mar 29 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
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
音乐器材管理制度
2014/01/31 职场文书
学校就业推荐信范文
2014/05/19 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
公司开业主持词
2015/07/02 职场文书