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装饰器 免去调用父类构造函数的麻烦
May 18 Python
总结Python编程中函数的使用要点
Mar 20 Python
Python学习小技巧之列表项的排序
May 20 Python
简单实现Python爬取网络图片
Apr 01 Python
Python3 修改默认环境的方法
Feb 16 Python
python字典一键多值实例代码分享
Jun 14 Python
Python实现FM算法解析
Jun 18 Python
python实现批量转换图片为黑白
Jun 16 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
深入了解Python enumerate和zip
Jul 16 Python
Python机器学习之KNN近邻算法
May 14 Python
Python包argparse模块常用方法
Jun 04 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
深入php socket的讲解与实例分析
2013/06/13 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
JavaScript实现禁止后退的方法
2006/12/27 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python入门教程之识别验证码
2017/03/04 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
python os.path模块常用方法实例详解
2018/09/16 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python 项目转化为so文件实例
2019/12/23 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
商务英语专业毕业生求职信
2014/07/06 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
学生个人评语大全
2015/01/04 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
编写python程序的90条建议
2021/04/14 Python
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis