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 判断一个进程是否存在
Apr 09 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
快速入手Python字符编码
Aug 03 Python
基于anaconda下强大的conda命令介绍
Jun 11 Python
python如何生成各种随机分布图
Aug 27 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Python命令行click参数用法解析
Dec 19 Python
利用Python计算KS的实例详解
Mar 03 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
用python 绘制茎叶图和复合饼图
Feb 26 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新手上路(九)
2006/10/09 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
浅谈javascript实现八大排序
2015/04/27 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python使用logging模块发送邮件代码示例
2018/01/18 Python
python基础教程项目二之画幅好画
2018/04/02 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
大学生村官工作感言
2014/01/10 职场文书
仓库管理制度
2014/01/21 职场文书
初中军训感想300字
2014/03/05 职场文书
工程采购员岗位职责
2014/03/09 职场文书
论文评语大全
2014/04/29 职场文书
考察现实表现材料
2014/05/19 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
珍爱生命主题班会
2015/08/13 职场文书