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之父谈Python的未来形式
Jul 01 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python编程中flask的简介与简单使用
Dec 28 Python
对python周期性定时器的示例详解
Feb 19 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
Python单元测试与测试用例简析
Nov 09 Python
Pyqt5自适应布局实例
Dec 13 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
pytorch实现查看当前学习率
Jun 24 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 debug 安装技巧
2011/04/30 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
浅谈PHP进程管理
2019/03/08 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
javascript简易画板开发
2020/04/12 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
对于Python中RawString的理解介绍
2016/07/07 Python
python append、extend与insert的区别
2016/10/13 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python 实现目录复制的三种小结
2019/12/04 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python实现四人制扑克牌游戏
2020/04/22 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
怎样声明子类
2013/07/02 面试题
试用期员工考核制度
2014/01/22 职场文书
党建工作经验交流材料
2014/05/25 职场文书
防灾减灾活动总结
2014/08/30 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
《月光曲》教学反思
2016/02/16 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python