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 用户登录验证的小例子
Mar 06 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
pandas中Timestamp类用法详解
Dec 11 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
python2与python3共存问题的解决方法
Sep 18 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
Python WEB应用部署的实现方法
Jan 02 Python
如何在django中实现分页功能
Apr 22 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
python程序需要编译吗
Jun 19 Python
openCV提取图像中的矩形区域
Jul 21 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
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
php的debug相关函数用法示例
2016/07/11 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
js tab效果的实现代码
2009/12/26 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Python实现Linux监控的方法
2019/05/16 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
民主评议党员自我鉴定
2014/10/21 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
工作自我推荐信范文
2015/03/25 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers