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 相关文章推荐
windows下wxPython开发环境安装与配置方法
Jun 28 Python
Python中函数的多种格式和使用实例及小技巧
Apr 13 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
python使用itchat实现手机控制电脑
Feb 22 Python
TensorFlow实现卷积神经网络
May 24 Python
Python装饰器的执行过程实例分析
Jun 04 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
详解Python的循环结构知识点
May 20 Python
Python imread、newaxis用法详解
Nov 04 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
MATLAB数学建模之画图汇总
Jul 16 Python
浅析NumPy 切片和索引
Sep 02 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中目录,文件操作详谈
2007/03/19 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
window.open的功能全解析
2006/10/10 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
javascript常用功能汇总
2015/07/05 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python self用法详解
2020/11/28 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
幼儿老师求职信
2014/06/30 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
python垃圾回收机制原理分析
2022/04/13 Python
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers