利用Python 实现图片转字符画
作者:我爱Python数据挖掘 发布时间:2022-05-06 11:31:01
标签:Python,图片,字符画
前言
相信大家在网上经常看到有人秀出各种各样的字符画,对于这个五彩斑斓的世界来说,我们日常看到的都是一些高清的彩色的图片,偶尔来个粗糙的黑白的字符画,还是比较解乏的。喜欢记得收藏、关注、点赞。
字符画的原理
这种字符画的原理也比较简单,我们可以把每个字符看成是一个大的像素,一个字符可以代表一种颜色,字符各类越多,可体现的颜色越多,字符画就更有层次感。
灰度值和RGB
灰度值是指黑白图像中点的颜色的深度,它的范围是0-255,白色为255,黑色为0,其他颜色介于两者之间。
RGB 是红绿蓝三颜色,通过不同的叠加可得到其他颜色。
要将图片转字符画,需要先定义一个字符集,用来和灰度值做映射,将图片每个像素的 RGB 值转换为一个灰度值,将其对应的字符输出就得到字符画。
RGB 转灰度值,有个转换学公式:
gray = (2126 * r + 7152 * g + 722 * b) / 10000
代码实战
我随意选择了一张图片:
我的目标是转化成下面这样:
根据以上转换原理,我们直接上代码:
from PIL import Image
char = list('M3NB6Q#OC?7>!:–;. ')
def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
grey = (2126 * r + 7152 * g + 722 * b) / 10000
char_idx = int((grey / (alpha + 1.0)) * len(char))
return char[char_idx]
def write_file(out_file_name, content):
with open(out_file_name, 'w') as f:
f.write(content)
def main(file_name="input.jpg", width=100, height=80, out_file_name='output.txt'):
text = ''
im = Image.open(file_name)
im = im.resize((width, height), Image.NEAREST)
for i in range(height):
for j in range(width):
text += get_char(*im.getpixel((j, i)))
text += '\n'
print(text)
write_file(out_file_name, text)
if __name__ == '__main__':
main('dance.png')
程序的思路:
定义一个字符数组,这个数组里面的字符可以随意写。
解析图片,将图片里面的每个像素点解析成 RGB 值。
根据我们上面的公式,将每个像素点转换成字符数组里面的一个字符。
将所有像素点对应的字符拼接起来,就完成了转换。
来源:https://blog.csdn.net/weixin_38037405/article/details/125456386


猜你喜欢
- 废话少说直接上代码样例如下import tensorflow as tfimport osfrom tensorflow.python.to
- 所谓匿名函数,即是不需要定义函数,像表达式一样使用,不需要函数名(很多时候名字让我很困扰),一些简单的函数简单化, 举个例子我需要两个整数相
- 从三个方面来说,主要有方面的措施:对象的引用计数机制、垃圾回收机制、内存池机制。一、对象的引用计数机制Python内部使用引用计数,来保持追
- 原文:https://dev.mysql.com/doc/refman/8.0/en/group-replication-monitorin
- Protocol Buffers (类似XML的一种数据描述语言)最新版本2.3里,protoc—py_out命令只生成原生的P
- 看了好多登录注册和注销的教程,很乱,很迷,然后总结了一下,简单的做了一个登录,注册和注销的页面。1,首先,使用pycharm创建一个项目单击
- Python爬虫之Scrapy环境搭建如何搭建Scrapy环境首先要安装Python环境,Python环境搭建见:https://blog.
- 在实际应用过程中,只要保证选项卡模块结构代码的完整性,就可以任意添加N个同类选项卡,不需要手动在HTML里绑定事件处理程序以及给要隐藏显示的
- 如果一个模型里包含了ManyToManyField,在admin后台可能会显示成object,例如解决方法:在定义这个类的时候,加多一个函数
- MySQL查询不使用索引汇总众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性
- vscode使用chatGPT一、下载chatPGT在拓展中找到chatGPT,我这里下载的是中文版二、使用1.使用快捷键 ctrl+shi
- MySQL去重的方法整理【初级】有极少的重复行使用distinct查出来,然后手动一行一行删除。【中级】按照单个字段的重复去重例如:对id字
- 如何直接调用Excel数据?在ASP中,不用ODBC,如何直接调用Excel数据? 在调用处理处,究竟是使用:xlApp.qui
- 注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存
- 实验介绍增量恢复一般适用的场景:1、人为的sql语句破坏了数据库2、在进行下一次完全备份之前发生系统故障导致数据库数据丢失3、在主从架构中,
- 本文主要给大家介绍了关于CentOS 6.5 安装Python 3.5.2并与Python2并存的相关内容,分享出来供大家参考学习,下面来看
- 使用axios固定url请求前缀main.js中添加:使用方法:定义axios默认路径前缀或动态修改前缀如:每个请求url前都要加一个前缀,
- 现在网页设计师除了把页面做的漂亮以外,越来越注重“用户体验”,就是要做“别让用户思考”的网页,使网站真正做到“可用性”。望望结合几年的工作经
- 本篇,我们学习PyQt5界面中拖放(Drag 和Drop)控件。拖放动作在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作。
- 目录1 Python变量概述2 Python变量的命名3 Python变量赋值3.1 Python赋值概述3.2 Python变量的基本格式