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之赋值,简单也不简单
Sep 24 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
python多线程同步之文件读写控制
Feb 25 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
python numpy中cumsum的用法详解
Oct 17 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
TensorFlow Autodiff自动微分详解
Jul 06 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
使用Apache的rewrite技术
2006/06/22 PHP
php MYSQL 数据备份类
2009/06/19 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
PHP实现的日历功能示例
2018/09/01 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
js格式化时间小结
2014/11/03 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
nodeJS模块简单用法示例
2018/04/21 NodeJs
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
vue ssr 指南详读
2018/06/29 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python处理excel绘制雷达图
2019/10/18 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
五年后的职业生涯规划
2014/03/04 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
爱心活动计划书
2014/04/26 职场文书
销售助理岗位职责
2015/02/11 职场文书
企业百日安全活动总结
2015/05/07 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
Java中的Kotlin 内部类原理
2022/06/16 Java/Android
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript