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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python使用Flask操作mysql实现登录功能
May 14 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
详解python的super()的作用和原理
Oct 29 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
Pandas 数据编码的十种方法
Apr 20 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
global.php
2006/12/09 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
JS原型对象通俗"唱法"
2012/12/27 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Python使用struct处理二进制的实例详解
2017/09/11 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python tornado上传文件的功能
2020/03/26 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
python的dict判断key是否存在的方法
2020/12/09 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
小学生暑假家长评语
2014/04/17 职场文书
欢迎领导标语
2014/06/27 职场文书
表扬通报怎么写
2015/01/16 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL