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中Flask框架简单入门实例
Mar 21 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
Python魔法方法详解
Feb 13 Python
python实现接口并发测试脚本
Jun 25 Python
pybind11在Windows下的使用教程
Jul 04 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
解决Django Haystack全文检索为空的问题
May 19 Python
python字符串的多行输出的实例详解
Jun 08 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/05 新手入门
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PDO::errorCode讲解
2019/01/28 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python获取远程图片大小和尺寸的方法
2015/03/26 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
清洁工表扬信
2014/01/08 职场文书
生产部管理制度
2014/01/31 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
入党个人总结范文
2015/03/02 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript