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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python requests发送post请求的一些疑点
May 20 Python
Python多重继承的方法解析执行顺序实例分析
May 26 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
关于keras中keras.layers.merge的用法说明
May 23 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导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python 类的继承实例详解
2017/03/25 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
高中的职业生涯规划书
2013/12/28 职场文书
合作投资意向书
2014/04/01 职场文书
房产委托公证书样本
2014/04/04 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
书香校园建设方案
2014/05/02 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
甲午大海战观后感
2015/06/02 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
python 实现的截屏工具
2021/05/08 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS