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三元运算实现方法
Jan 12 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
Apr 24 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 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加密解密类代码
2011/11/27 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
各种常用的JS函数整理
2013/10/25 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Python实现控制台进度条功能
2016/01/04 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python实现PCA降维的示例详解
2020/02/24 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
优秀公益广告词大全
2014/03/19 职场文书
临床护理求职信
2014/04/26 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
工作岗位职责范本
2015/02/15 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python