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 添加用户设置密码并发邮件给root用户
Jul 25 Python
python 异常处理总结
Oct 18 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
zookeeper python接口实例详解
Jan 18 Python
python实现Adapter模式实例代码
Feb 09 Python
3个用于数据科学的顶级Python库
Sep 29 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 Python
pandas分区间,算频率的实例
Jul 04 Python
python 寻找离散序列极值点的方法
Jul 10 Python
简单了解python的一些位运算技巧
Jul 13 Python
python3实现无权最短路径的方法
May 12 Python
Django框架中模型的用法
Jun 10 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
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
人事科岗位职责范本
2014/03/02 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
高中班主任寄语
2019/06/21 职场文书
go xorm框架的使用
2021/05/22 Golang
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技