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爬虫:通过关键字爬取百度图片
Feb 17 Python
python记录程序运行时间的三种方法
Jul 14 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python计算两个数的百分比方法
Jun 29 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
简单了解python关系(比较)运算符
Jul 08 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
Vue指令指令大全
2019/02/09 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
python抓取网页图片并放到指定文件夹
2014/04/24 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
采购文员岗位职责
2013/11/20 职场文书
《四季》教学反思
2014/04/08 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js
正则表达式基础与常用验证表达式
2022/06/16 Javascript