Python实现图片转字符画的示例


Posted in Python onAugust 22, 2017

字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画。

但是像素是有颜色深浅的,我们如何将带有不同颜色的像素编码为对应的字符呢?

转化方法:

  • 将彩色图片转化为灰度图
  • 根据颜色深浅的RGB值(值域从0到255,其中0为黑色,255为白色)
  • 涉及自己喜欢的字符集合
  • 根据字符集顺序及字符集长度,由RGB值编码为对应的字符。

RGB

RGB色彩模式是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色。

通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。

灰度图

灰度图是指只含亮度信息,不含色彩信息的图象,就象我们平时看到的黑白照片:亮度由暗到明,变化是连续的。

因此,要表示灰度图,就需要把亮度值进行量化。通常划分成0到255共256个级别,其中0最暗(全黑),255最亮(全白)。在表示颜色的方法中,除了RGB外,从彩色图片中的RGB 到 灰度值Gray 转换公式为:

#在PIL中,从模式“RGB”转换为“L”模式(灰度模式)
Gray = 0.299R+0.587G+0.114B

比如我们用小写英文26字母作为我们的字符集。字符集容量为26(一个字符对应的值 区间宽度= 256/字符集长度)

这里的区间宽度为256/26=9.8),

gray与字符集对应关系:

gray区间对应字符

[0.0, 9.8)这|a
[9.8, 19.6)|b
[19.6, 29.4)|c
...|...
[225.6, 235.4]|x
[235.4, 245.2]|y
[245.2, 255.0]|z

RGB转字符函数

char_string = 'abcdefghijklmnopqrstuvwxyz'

def rgb2char(r, g, b):
  length = len(char_string)
  gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)

  # 每个字符对应的gray值区间宽度
  unit = (256.0 + 1) / length

  # gray值对应到char_string中的位置(索引值)
  idx = int(gray / unit)
  return char_string[idx]

预处理

如果尺寸太大或太小,导致我们打开txt文件无法辨识出字符画。所以要先将图片尺寸调整合适。这里注意,大家可根据需要更改伸缩系数delta系数

from PIL import Image

#预处理(将图片尺寸压缩,并转为灰度图) 
def preprocess(img_path,delta=100):
  img = Image.open(img_path) 
  # 获取图片尺寸
  width, height = img.size
  # 获取图片最大边的长度 if width > height:
    max = width
  else:
    max = height

  # 伸缩倍数scale
  scale = max / delta
  width, height = int(width / scale), int(height / scale)
  img = img.resize((width, height)) 
  return img

图片转字符

读取图片,根据坐标获得该像素的rgb元组,并编码为字符

def img2char(img_obj, savepath):
  txt = ''
  width, height = img_obj.size
  # 获取像素点的rgb元组值,如(254, 0, 0),并将其转化为字符
  for i in range(height):
    line = ''
    for j in range(width):
      line += rgb2char(*img_obj.getpixel((j, i)))
    txt = txt + line + '\n'

  # 保存字符画
  with open(savepath, 'w+', encoding='utf-8') as f:
    f.write(txt)




img_obj = preprocess(img_path)
img2char(img_obj, savepath)

插入图片

Python实现图片转字符画的示例

Python实现图片转字符画的示例 

更改char_string,变换你想要的效果

Python实现图片转字符画的示例

Python实现图片转字符画的示例 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python类的专用方法实例分析
Jan 09 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
python suds访问webservice服务实现
Jun 26 Python
python集合能干吗
Jul 19 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
利用aardio给python编写图形界面
Aug 21 #Python
Python实现图片转字符画的示例代码
Aug 21 #Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 #Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 #Python
Python编程之微信推送模板消息功能示例
Aug 21 #Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 #Python
virtualenv实现多个版本Python共存
Aug 21 #Python
You might like
thinkphp模板继承实例简述
2014/11/26 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
详解Python发送邮件实例
2016/01/10 Python
分分钟入门python语言
2018/03/20 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
python实现按关键字筛选日志文件
2019/12/24 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
SQL数据库笔试题
2016/03/08 面试题
专科应届毕业生求职信
2014/06/04 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
换届选举主持词
2015/07/03 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
bat批处理之字符串操作的实现
2022/03/16 Python