news 2026/9/30 2:41:28

一键将图片转为炫酷字符画

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一键将图片转为炫酷字符画

在这篇文章里头, 我们会去用到下面这些个知识点的哦。

完整的一个程序, 那个用来把图片转换成字符画的py脚本。

请先在命令行工具中找到存放图片文件的那个目录位置, 接着把当前路径切换到那个地方去执行操作, 然后启动名为图片转字符画.py的这个程序脚本并在其后面跟上参数.png这个后缀的标记。

这就拿来作为一个给图片用的名称呗。

from PIL import Image

import argparse

# 创建实例

parser = argparse.ArgumentParser()

# 定义输入文件、输出文件、输出字符画的宽和高

parser.add_argument('file')

parser.add_argument('-o','--output')

parser.add_argument('--width', type=int, default=80)

parser.add_argument('--height',type=int, default=80)

args = parser.parse_args()

IMG = args.file

WIDTH = args.width

HEIGHT = args.height

OUTPUT = args.output

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft"

"/\|()1{}[]?

-_+~<>i!

lI;:,\"^`'. ")

def get_char(r, g, b, alpha=256):

# 判断 alpha 的值

if alpha == 0:

return ' '

# 获取字符集的长度

length = len(ascii_char)

# 将 RGB 值转为灰度值 gray,灰度值范围为 0-255

gray = int(0.2126*r + 0.7125*g + 0.0722*b)

unit = (255.0 + 1)/length

return 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):

# 将(j,i)坐标的 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),PNG,RGB

调整图片大小

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%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

最后一步是建立灰度数值和对应的字符画元素之间的映射关系。

gray = int(0.2126*r + 0.7125*g + 0.0722*b)

unit = (255.0 + 1)/length

return 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.png

python file.py imagename.png --width=100

import argparse

# 创建实例

parser = argparse.ArgumentParser()

# 定义输入文件、输出文件、输出字符画的宽和高

parser.add_argument('file')

parser.add_argument('-o','--output')

parser.add_argument('--width', type=int, default=80)

parser.add_argument('--height',type=int, default=80)

# 解析并获取参数

args = parser.parse_args()

IMG = args.file

WIDTH = args.width

HEIGHT = args.height

OUTPUT = args.output

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 2:41:03

在现代 Python 编程中,字符串格式化是数据展示、日志记录、Web 开发以及数据分析中最基础也最核心的操作之一

在现代 Python 编程中&#xff0c;字符串格式化是数据展示、日志记录、Web 开发以及数据分析中最基础也最核心的操作之一。随着 Python 语言的迭代&#xff0c;字符串格式化的方式经历了从 % 操作符到 str.format() 方法&#xff0c;再到 Python 3.6 引入的 f-string&#xff0…

作者头像 李华
网站建设 2026/9/30 2:41:03

Layer3/4与Layer7防护差异(实战笔记)最佳实践与踩坑记录

本文深入探讨Layer3/4与Layer7防护差异&#xff08;实战笔记&#xff09;&#xff0c;涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。 在DDoS与CC防护领域&#xff0c;Layer3/4与Layer7防护差异&#xff08;实战笔记&#xff09;是开发者和技术负责人持续关…

作者头像 李华
网站建设 2026/9/30 2:40:31

我妈不懂什么是系统,她只跟AI说了一句话

我妈开了九年裁缝铺&#xff0c;改衣、缝边、上拉链&#xff0c;街坊生意。她这辈子跟电脑的交集是收银机和家庭群语音。上个月&#xff0c;她拥有了一套自己的管理系统——全程她只说了一句话。这条视频记录的全过程&#xff0c;比我预想的离谱。 一、铺子的老毛病 单子记小本…

作者头像 李华
网站建设 2026/9/30 2:40:30

Docker 容器 OOM 被杀?内存限制与排查完整指南

容器跑着跑着突然消失&#xff0c;docker ps 里找不到了&#xff0c;应用日志最后一行还停在正常的业务输出上&#xff0c;没有任何报错——这是 OOM&#xff08;Out Of Memory&#xff09;被杀的典型表现。它和普通崩溃不一样&#xff1a;进程是被内核直接 SIGKILL 的&#xf…

作者头像 李华
网站建设 2026/9/30 2:40:28

大厂校招薪资揭秘:前端、AI、测开方向薪资大盘点,小白必看!

本文汇总了字节跳动、腾讯、阿里巴巴、京东、美团、百度、快手、网易、小米、滴滴等热门大厂校招薪资情况&#xff0c;涵盖前后端、AI、测开等方向。数据基于往届案例&#xff0c;包括公开信息和内部渠道。文章详细对比了各厂的薪资待遇、签字费、股票等福利&#xff0c;并提醒…

作者头像 李华
网站建设 2026/9/30 2:39:52

自动捡球机器人4—调研4之采购

文章目录一、你今天第一件事&#xff1a;什么都别买&#xff0c;先量羽毛球二、第一台机器长什么样三、第一批采购&#xff1a;控制在 500&#xff5e;800 元A. 工具——以后整个机器人都要用B. 电源&#xff1a;你千万先不要买裸露的 220V 开关电源四、第一台实验机只需要一个…

作者头像 李华