我相信许多人都知道ASCII艺术,这是一种使用印刷ASCII角色组成的图形设计技术。该艺术的最简单形式是表情符号,例如:-)或:-3,今天我们将做更多复杂的图像。
首先,让我们澄清下一个图像在计算机系统中表达的方式。图片通常以.png或.jpg格式存储在磁盘上。所有这些文件类型都具有相似的结构:它们通常由标题和数据部分组成。实例像素数据。
我们看到的实际图像由像素组成。像素是我们熟悉的光栅图像中最小的可寻址元素。它们通常代表一组频道,也称为颜色。在最常见的颜色值中,有经典的RGB(红色和绿色蓝色)和RGBA(红色和绿色(红色和绿色)alpha)。两者之间的差异是后者具有一个额外的通道,称为“ alpha”,该通道用于指定图像的不透明性。
RGBA是我们将使用的,因为它也可以用来表示空背景。
现在我们已经了解了图像的表达,然后讨论如何将像素转换为实际的ASCII字符
为了理解这一点,我们首先看一下像素的强度。该值是指所有像素通道的总和除以通道可以拥有的最大值(在此示例255中)
为了清楚起见,我们在第一行中引入了静态类型
在上面的代码中,我们定义了一个新的像素类型,一个由四个整数组成的元组,每个整数代表RGBA像素的通道。然后定义一个函数以提取给定像素的强度。首先添加所有通道值,然后用像素通道可以实现的最大值去除结果,以有效地获得强度百分比。
一旦计算出像素的强度,我们就可以将其映射到ASCII字符。出于这个原因,我们必须定义一个字符集用于指示像素
字符集的顺序是从空间到@,这意味着越密集的像素,相应的ASCII字符所占据的空间越多。
此函数将给定的像素强度映射到集合中的字符。
现在,让我们使用一个简单的脚本将这些代码片段粘在一起
一旦获得图像ASCII字符串的表达式,下一个方法是通过图形方法查看它。最简单的方法是将其打印到控制台上。由于图像通常是由像素组织的,因此我们还必须在打印时相应地使用更改符号。
在这里,我们编写了一个简单的功能,将ASCII打印到控制台以及如何从主函数打电话
让我们首先更改一个简单的图片:
输出:
可以看出,图像仍然扭曲,我们将优化它。
使用HTML显示转换图像
让我们看一下不同图片转换为ASCII后的效果。
以下是完整的代码:
好的,就是今天的分享。如果您喜欢,就像它一样!