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多线程编程简单介绍
Apr 13 Python
python实现矩阵乘法的方法
Jun 28 Python
python实现多线程抓取知乎用户
Dec 12 Python
Python反射的用法实例分析
Feb 11 Python
机器学习之KNN算法原理及Python实现方法详解
Jul 09 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
python 标准差计算的实现(std)
Jul 29 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
python的等深分箱实例
Nov 22 Python
python为什么会环境变量设置不成功
Jun 23 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
总结python多进程multiprocessing的相关知识
Jun 29 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
第十一节--重载
2006/11/16 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
python由已知数组快速生成新数组的方法
2020/04/08 Python
Python无损压缩图片的示例代码
2020/08/06 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
荷兰超市:DEEN
2018/03/14 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
董事长助理工作职责
2014/06/08 职场文书
大学生活感想
2015/08/10 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
python for循环赋值问题
2021/06/03 Python
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js