Python实现图片换ASCII文本图像

用Python转换 ascii(P3) 格式的 PPM 为jpg     前两天有朋友让我帮忙转换下 PPM 格式的图片到 jpg 格式,感觉举手之劳就答应了,但用python的PIL库中 Image 模块转换时候,发现连读取图片都不能成功。。。内伤。。。     赶紧找相关资料学习。通过学习kinghzkingkkk 的博客了解到,PPM 格式的图片分为ASCII(P3)和binary(P6)两种编码类型。wiredfool 提到,PIL是不支持P3编码... 阅读详情

图像在计算机中的表示

图像在计算机中的采用RGB加色模型显示的。在计算机内部,图像拥有4个属性

  • R: 红色
  • G: 绿色
  • B: 蓝色
  • A: 透明度(alpha)
  • RGB: 取值范围0−2550-2550−255,数值越大,颜色越深
  • A: 取值范围0−2550-2550−255,0表示完全透明,255表示完全不透明

任意一种颜色,在计算机中都可以用4个数字表示。

from PIL import ImageColor

# 查看各种颜色的RGBA值
print(ImageColor.getcolor('red', 'RGBA'))
# (255, 0, 0, 255)

# 黑色表示没有任何颜色,所以RGB值都是0
print(ImageColor.getcolor('BLACK', 'RGBA'))
# (0, 0, 0, 255)

print(ImageColor.getcolor('blue', 'RGBA'))
# (0, 0, 255, 255)

# 白色代表RGB全部的混合
print(ImageColor.getcolor('white', 'RGBA'))
# (255, 255, 255, 255)

不同的颜色,RGB三个数值之和肯定不同,因此就可以建立起RGB之和关于字符集合中每个字符的一一映射关系。但实际上,由于RGB之和最大为765,而输入的ASCII字符远远没有这么多。所以,需要对RGB之和进行同等比例缩小映射。

还有,对于RGB之和的数值,不能简单地将三者相加,需对RGB各个数值分配权重再相加。借助灰度值公式可以得到比较恰当的RGB转灰度值结果

0.2126 * r + 0.7152 * g + 0.0722 * b

可以计算每个像素点的灰度值之后,就需要对整个图像所有像素点进行处理。在计算机中,图像可以理解为一个二维数组(矩阵),数组每个值是对于某个像素点的RGB值。因此,只需要遍历计算数组中每个值就行了。

处理图像

Python中的提供了PIL模块来实现对图像的处理

from PIL import Image

load_image = Image.open('./test.png')
print(load_image.size)  #获取图像得到宽和高

获取图像二维数组中每个坐标的RGBA的值

width, height = load_image.size
image_RGBA = []
for row in range(height):
    row_RGBA = []
    for col in range(width):
        # getpixel((x, y))获取坐标的RGBA值
        row_RGBA.append(image.getpixel((row, col)))
    image_RGBA.append(row_RGBA.copy())
    row_RGBA.clear()
print(image_RGBA)
# [[(255, 255, 255, 0), (255, 255, 255, 0), (255, 255, 255),...

接下来计算图像的灰度值,并将其等比映射到ASCII字符集中

# 计算灰度值
gray_value = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
# 计算放缩比例
ratio = 256 / len(ascii_char)
# 返回索引所对应的ASCII
ascii = ascii_char[int(gray_value / ratio)]

输出ASCII字符图像

将灰度值映射到ASCII字符集的数值,视为ASCII字符集的索引值index。打印时,依次读取ascii_char[index]的再输出即可。

ascii_print = ""
for row in ascii_list:
    for col in row:
        ascii_print += ascii_char[col]
    ascii_print += '\n'
print(ascii_print)

重构代码

整个处理过程分三步走

  • 读取图像每个像素RGB值
  • 计算图像每个像素对应的灰度值,并得到映射字符集合的索引
  • 根据索引值获取字符,保存并输出

重构一下整个代码,并添加保存字符图像文本的功能。
完整代码

运行结果

对应稍微“复杂”的图像,转成ASCII文本显示效果并不好。因为每种颜色都会计算出一个灰度值,然后对应一个字符,这样会显得密密麻麻的。只有颜色单调,且图像轮廓清晰,有无太多背景色的图像,效果比较好。
花
哆啦A梦

使用Python将任何图像转换为ASCII Art(文字图像) 什么是ASCII ?: ASCII,缩写为“美国信息交换标准代码”。 ASCII是电子通信的字符编码标准。ASCII码表示计算机,电信设备和其他设备中的文本。 使用的模块: pywhatkit模块: pywhatkit是具有各种有用功能的Python库。这是一个易于使用的库,不需要您进行一些其他设置。 为了访问Python库,您需要将其安装到Python环境中 pip install pywhatkit as kt 现在,我们需要在python脚本中导入包。使用以下命令进行操作。 . 阅读详情

相关推荐

用Python实现图片转ASCII艺术:图像处理与字符艺术的完美结合

本文详细介绍了如何使用Python将图片转换为ASCII字符艺术,展示了图像处理与字符显示的巧妙结合。通过Pillow库加载图像,调整图片尺寸并转为灰度图,然后将像素的灰度值映射为ASCII字符。最后,通过格式化输出生成完整的ASCII艺术图。文章提供了完整的代码示例,并介绍了如何保存ASCII艺术到文件以及进行优化和扩展。适合对图像处理和ASCII艺术感兴趣的读者。

一个被知识诅咒的人 2232

在Python中将图像转换为ASCII字符图

本文重点介绍了如何使用Python来一步一步的实现将图像转化为ASCII字符照,并给出了完整的代码实现。您学废了嘛?

sgzqc的专栏 3710

制作ASCII文本艺术图形

我准备扩展它的功能色彩支持: 目前,程序仅处理灰度图像。如果要支持彩色图像,可以分别对红、绿、蓝三个通道计算平均亮度,并结合这三个通道的亮度选择合适的ASCII字符。更精细的灰度映射: 现有的两个灰度等级表可以进一步优化,比如创建更多的级别,或者允许用户自定义灰度映射表。自适应缩放: 程序目前要求用户提供列数和缩放因子。为了增加灵活性,您可以自动调整这些值以更好地适应图像的宽高比,确保输出的ASCII艺术具有较好的视觉效果。动态字体大小。

小恒的博客 1515

Python将图片转换为ASCII字符画

教你如何使用python将图片转为字符画

小小明-代码实体的专栏 2万+

用Python实现终端中的图像和风格化文本打印技术

Colorama 库允许用户自定义文本的样式和颜色,从而可以创建符合自己需求的个性化终端输出。以下是如何自定义文本风格的示例:# 自定义风格print(custom_style + '这是一个自定义样式的文本')在这个例子中,我们组合了红色、弱显示和加亮的风格。自定义风格是通过Fore和Style类的组合来实现的。termcolor库是一个在Python中用于控制终端输出颜色的库。

weixin_42174098的博客 790

ImageToAscii:将图像转换为ASCII艺术

ImageToAscii 使用opencv-python将图像转换为ASCII图像。 自定义变量 PXL_SIZE :每个字符代表的像素数量的平方根(值1表示1个字符代表1 ^ 2 = 1像素)。 应该是输入图像尺寸的共同因素。 通过默认,它被设置为最大的共同因素。 colGrad :用于制作ASCII文字的字符的元组,其中colGrad[0]是最暗的值,而colGrad[-1]是最亮的值。 例子

Python极客项目编程之ASCII文本图形

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、学习目标及步骤二、使用步骤1.引入库2.读入数据总结 前言   ASCII文本图形源头是19世纪后期出现的打字机文本图形。在20世纪60年代,计算机有了较弱的图形处理硬件,ASCII被用于表示图形。今天,ASCII文本图形继续作为因特网上的一种表现形式,你可以在网上找到各种创意的例子。 一、学习目标及步骤   这个项目用Python创建一个程序,从图像生成ASCII文本图形。该程序让你指定输出文本序列的宽度,并设置垂直比

weixin_45616399的博客 1658

image2ascii:Python 实现的图片转 ASCII 码脚本

Python 图形转 ASCII 字符示例 TODOS 实现灰度计算版本 实现边缘界定版本 图片像素化

Python实现图片转ASCII文本图形

Python实现图片转ASCII文本图形 视频讲解:https://v.qq.com/x/page/u0681ujebmb.html 演示PPT及源代码下载: #coding=utf-8 import sys, random, argparse#argparse库用于命令行解析 import numpy as np #numpy库用于大型矩阵计算 import math ...

XerCis的博客 5572

Image2Text:从图像文件生成 ASCII 文本文件-matlab开发

ASCII 输出的图像:) 简约代码

image2ascii:用golang编写的ASIC工具的图像

#image2ascii 一个用 golang 编写的图像转 ascii 工具 安装 可以使用gobuild下载。 ##用法 ./image2ascii -path=[image path] -q=[quality] -to=[out file path] 如果-to未设置,image2asiic 将打印到标准输出。 -q 1 是最高级别的质量。 ##示例-q=3 -q=1

用 Python 创造 ASCII 艺术:从图像到字符的魔法 将字符制作图画

这段代码的核心思想是将图像的灰度值映射到一组 ASCII 字符,从而生成 ASCII 艺术图像。通过逐步解析代码,我们可以更好地理解每个步骤的作用和实现方式。我们还可以通过调整字符集、图像宽度和保存结果来扩展和定制代码。

m0_74972192的博客 1507

数字ASCII转换成16进制.png

/*C 语言 数字ASCII 转换成 16进制 有时候我们采集到的数据需要发送到上位机或串口打印输出目的是方便直观监测 比如 数字 5264转换成后输出 0x52 0x64 这样就很方便观测*/

用Python把图片转换为ASCII字符的程序

(说明: 这是我2007年写在cublog(China Unix)上的博客,现在把它转到这里来.)         很早就有人在QQ上发表字符串构成的图片,虽然看上去乱七八糟,但是总算还是图片,而且非常有意思。今天偶然看到别人在QQ上发表的一个ASCII图片,于是我也想自己编一个这样的程序,借助于强大的Python。     首先要用到的是Python的图像处理库 PIL,关于PIL(Py

骇客•詹姆斯 6219

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 578

【OpenClaw企业级智能体实战】第13篇:1+N架构实战!OpenClaw多Agent数字员工军团搭建指南(含完整配置+路由策略+代码落地)

单Agent因“记忆负担重、Token消耗高、响应不精准”已难以满足复杂场景需求,而多Agent团队通过“1个编排者+N个执行者”的分工协作模式,能让效率提升300%以上。本文基于OpenClaw 2026稳定版,结合阿里云开发者社区实战案例,从核心认知、准备工作、实操流程、协作机制、安全配置五大维度,完整拆解多Agent团队搭建全流程。文中包含可直接复制执行的代码、详细配置模板、路由策略设置及常见问题排查,新手可在1-2小时内落地属于自己的“数字员工”军团,覆盖内容创作、技术支持、多平台运营等多场景。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 745

4.5.ASCII文本圖案的python實現

圖像生成ASCII文本圖案

datongitis的博客 737

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6038

python文字转图片_Python 将文本转为图片

有时候,我们需要将文本转换为图片,比如发长微博,或者不想让人轻易复制我们的文本内容等时候。目前类似的工具已经有了不少,不过我觉得用得都不是很趁手,于是便自己尝试实现了一个。在 Python 中,PIL (Python Imaging Library) 是最常用的绘图库,自然地,尝试从 PIL 开始。1、使用 PIL 将文字转换为图片说转换其实并不恰当,真实的过程是:先在内存中生成一张图片,将需要的...

weixin_39720510的博客 5011

基于FPGA的UDP 通信(一)

手头的FPGA开发板上有一个千兆网口,最近准备做一下以太网通信的内容。本文先介绍基本的理论知识。 FPGA芯片型号:xc7a35tfgg484-2 网口芯片:RTL8211 网络接口:RJ45

记录所学,分享知识,结识挚友 8357

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

python视频转文本_ASCII 生成器 (图片转文本,图片转图片,视频转视频)

[PYTHON] ASCII generatorIntroductionHere is my python source code for ASCII generator. with my code, you could:Given input image, you could generate ASCII art stored under text format (.txt)Given inpu...

weixin_39795479的博客 380

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

Airtest进阶篇,主要分享如何提高脚本稳定性+如何批量运行脚本生成测试报告!

程序员小杨哥的博客 2569

通过 Python 把图片转换为 ASCII art,好玩!

作者 |周萝卜来源 |萝卜大杂烩相信很多人都知道 ASCII art,这是一种使用可打印 ASCII 字符集来构图的图形设计技术。这种艺术最简单的形式就是表情符号,例如:-) 或 :-3,...

AI科技大本营 1642

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 461

RabbitMQ高级特性 - 生产者消息确认机制

为了保证信息 从生产者 发送到 队列,因此引入了生产者的消息确认机制.通过事务机制实现.通过发送确认机制(confirm 和 return)实现.因为事务机制比较消耗性能,在实际工作中用的也不多,因此这里主要介绍confirm 和 return机制来实现发送放的确认.a)confirm 确认模式如上图,confirm 确认模式主要保障于 生产者 到 交换机 的消息可靠性.如果 Exchange成功收到消息,那么 ConfirmCallback 这个回调 ack 参数就为true。

CYK_byte的博客 1883
上一篇: 求特殊的斐波那契数
reedzhan
博客等级 码龄10年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值