尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
一键将图片转为炫酷字符画
在这篇文章里头, 我们会去用到下面这些个知识点的哦。完整的一个程序, 那个用来把图片转换成字符画的py脚本。请先在命令行工具中找到存放图片文件的那个目录位置, 接着把当前路径切换到那个地方去执行操作, 然后启动名为图片转字符画.py的这个程序脚本并在其后面跟上参数.png这个后缀的标记。这就拿来作为一个给图片用的名称呗。from PIL import Imageimport argparse# 创建实例parser argparse.ArgumentParser()# 定义输入文件、输出文件、输出字符画的宽和高parser.add_argument(file)parser.add_argument(-o,--output)parser.add_argument(--width, typeint, default80)parser.add_argument(--height,typeint, default80)args parser.parse_args()IMG args.fileWIDTH args.widthHEIGHT args.heightOUTPUT args.outputascii_char list($B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~i!lI;:,\^. )def get_char(r, g, b, alpha256):# 判断 alpha 的值if alpha 0:return # 获取字符集的长度length len(ascii_char)# 将 RGB 值转为灰度值 gray灰度值范围为 0-255gray int(0.2126*r 0.7125*g 0.0722*b)unit (255.0 1)/lengthreturn ascii_char[int(gray/unit)]if __name__ __main__:# 打开并调整图片的宽和高im Image.open(IMG)# WIDTH, HEIGHT im.size# 调整图片尺寸对应到输出的字符画的宽度和高度 Image.NEAREST 表示输出低质量的图片im im.resize((WIDTH, HEIGHT), Image.NEAREST)# 初始化输出的字符串txt # 遍历图片中的每一行for i in range(HEIGHT):# 遍历该行中的每一列for j in range(WIDTH):# 将ji坐标的 RGB 像素转为字符后添加到 txt 字符串txt get_char(*im.getpixel((j, i)))# 遍历完一行后需要增加换行符txt \n# 输出到屏幕print(txt)# 字符画输出到文件if OUTPUT:with open(OUTPUT, w) as f:f.write(txt)else:with open(output.txt,w) as f:f.write(txt)主要的思路, 是首先通过模块去获取图片当中的RGB属性。接着, 要把这些RGB数值转换成灰度值。然后, 根据得到的数值来匹配合对的字符进行拼接。最后, 再把处理好的内容输出到文件里面。接下来是对这个使用的库做简要介绍。将图片进行展示。im Image.open(IMG)im.show()图片基本属性print(im.size,im.format,im.mode)# (100,100)PNGRGB调整图片大小im.resize((w, h), Image.NEAREST)获取该像素点的红色、绿色与蓝色的数值, 最终返回的结果是一个包含这三种元素值的元组格式。im.getpixel((i,j))进行获取字符画的相关操作。灰度值与RGB简介灰度值说的是黑白图像里那个点的颜色深度情况, 它的数值范围一般是从零零到二五五这样来的, 当数值是一百五十五的时候代表白色, 是零的时候代表黑色, 所以我们就把那种黑白图片也叫作灰度图像了。RGB色彩模式是工业界使用的一种颜色标准, 它是通过对红, 简称r的颜色通道进行操作, 还有绿, 简称g的颜色通道, 以及蓝, 简称b的颜色通道的变化来处理颜色的, 这些变化包括通道自身的变化, 也包括它们相互之间的叠加, 通过这种方式来得到各式各样的颜色, rgb这三个字母即是代表红绿色的三个通道中的红色, 绿色, 蓝色这三个通道的意思, 这个标准几乎包括了人类视力所能感知的所有颜色, 所以它就是目前运用最广的颜色系统之一。把像素的红、绿、蓝这三个通道的数值放一起, 套进灰度值的那个计算公式里面去算, 最后就能得到这个像素对应的灰度值了。gray 0.0216*r 0.7125*g 0.0722*b接着, 你可以去创建出一个里面的元素不会互相重复的字符组成的列表, 其中对于灰度值比较小也就是相对较暗的部分使用这个列表开头位置的符号来进行表示, 而对于灰度值比较大也就是相对较亮的部分则使用这个列表最末尾处的符号来进行表示。ascii_char list($B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~i!lI;:,\^. )最后一步是建立灰度数值和对应的字符画元素之间的映射关系。gray int(0.2126*r 0.7125*g 0.0722*b)unit (255.0 1)/lengthreturn ascii_char[int(gray/unit)]文件保存当.txt文件不存在的时候, 我们就去创建它, 而当该文件已经存在的时候, 我们就用新的内容将其覆盖掉。# 字符画输出到文件if OUTPUT:with open(OUTPUT, w) as f:f.write(txt)else:with open(output.txt,w) as f:f.write(txt)库命令行输入首先利用那个带点的圆括号把实例给创建出来。然后, 再往里面加上命令行参数。大家需要注意, 在参数--width的前面有两个连字符。这两个连字符表示这是一个可选参数。所以, 当大家在命令行输入命令的时候, 可以选择这样去做。python file.py imagename.pngpython file.py imagename.png --width100import argparse# 创建实例parser argparse.ArgumentParser()# 定义输入文件、输出文件、输出字符画的宽和高parser.add_argument(file)parser.add_argument(-o,--output)parser.add_argument(--width, typeint, default80)parser.add_argument(--height,typeint, default80)# 解析并获取参数args parser.parse_args()IMG args.fileWIDTH args.widthHEIGHT args.heightOUTPUT args.output
RELATED

相关推荐

cocos2d-x双人坦克大战demo:输入分发与碰撞判定实战

cocos2d-x双人坦克大战demo:输入分发与碰撞判定实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/30 2:41:38
Verilog三段式状态机设计:状态编码、串口实现与跨平台映射

Verilog三段式状态机设计:状态编码、串口实现与跨平台映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/30 2:41:38
DETR深度解析:Transformer如何颠覆目标检测的端到端范式

DETR深度解析:Transformer如何颠覆目标检测的端到端范式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/30 2:41:38
MORE NEWS

更多资讯

📰

从单兵到团队:Codex多Agent协作开发实战复盘

1. 从单兵作战到团队协作:我为什么开始折腾 AI 开发团队最早用 Codex 那会儿,我跟大多数人一样,把它当成一个"高级点的代码补全"——写个函数、补个测试、解释一段报错,用完就关。直到有一次我接了个需求:把…

📰

AI组队协作实战指南:从招募到跑通项目的全流程拆解

1. 从一句“组队”喊话说起:AI协作到底在组什么队“ai组队有人一起吗”——这句话放在三五年前,大概率会被当成游戏开黑或者拼单凑人头的闲聊。但放在今天,它已经成了一个相当典型的信号:说这话的人,多半是手里攥着一个…

📰

Gram-Schmidt正交化从原理到代码:经典与修正版及最小二乘应用

Gram-Schmidt正交化,是线性代数里一个看起来公式很短、用起来却处处是坑的方法。我最早学它的时候,老师写了几行投影公式就带过去了,作业也能算,但一到真正做数值实验,发现结果总是不对劲:明明理论上是正交…

📰

左右导数与导函数左右极限的区别:分段函数可导性判断全解析

“老师,这道分段函数在分界点处,我算导函数的左右极限都是 1,为什么标准答案还说要用定义重新算一遍?”这是我被问过无数次的问题。提问的学生通常已经掌握了“左导数”和“右导数”的公式,也明白“可导的充要条件是左…

📰

多源异构数据融合与网络安全态势评估:从第一公里到落地实践

简介:《基于多源异构数据融合的网络安全态势评估体系》是一篇面向网络安全研究人员与工程师的参考文献PDF,针对单点网络数据难以精确检测恶意活动、无法有效分析整体态势的问题,提出了由流量探测、属性提炼、决策引擎、多源融合与态势评估五大…

📰

百度前端实习一面全记录:原理、手写题与项目追问实战

1. 面试前夜:百度前端实习的一面到底在考什么2026年3月11日,我参加了百度前端实习的一面。说实话,面完出来最大的感受是:百度的面试风格和网上流传的那些“背题就能过”的经验帖真的不太一样。先交代一下背景,我是某双…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬