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聚类算法之DBSACN实例分析
Nov 20 Python
简单谈谈Python中的闭包
Nov 30 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
python基于物品协同过滤算法实现代码
May 31 Python
python去除文件中重复的行实例
Jun 29 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
浅谈django 重载str 方法
May 19 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
利用python进行文件操作
Dec 04 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
python处理json数据文件
Apr 11 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中的观察者模式
2010/03/24 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
jQuery遍历Table应用示例
2014/04/09 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
计算机专业应届毕业生自荐信
2013/09/26 职场文书
1000字打架检讨书
2014/11/03 职场文书
模范教师事迹材料
2014/12/16 职场文书
农业项目投资意向书
2015/05/09 职场文书
唐山大地震观后感
2015/06/05 职场文书
初中班主任工作随笔
2015/08/15 职场文书