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 相关文章推荐
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
python打开使用的方法
Sep 30 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
python线程join方法原理解析
Feb 11 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
Python列表的深复制和浅复制示例详解
Feb 12 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模板引擎
2016/08/26 PHP
php批量修改表结构实例
2017/05/24 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
vue组件name的作用小结
2018/05/23 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python实现计算图形面积
2021/02/22 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
迟到检讨书400字
2014/01/13 职场文书
投标承诺书范本
2014/03/27 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
公司演讲稿开场白
2014/08/25 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
李强感恩观后感
2015/06/17 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
python基础之//、/与%的区别详解
2022/06/10 Python