您的位置 首页 java

神级程序员100行代码,用 Java 生成 ASCII 字符画

ascii 艺术这种主要依靠电脑表现的艺术形式是指使用电脑字符(主要是ASCII)来表达图片。它可以由文本编辑器生成。很多ASCII艺术要求使用均衡字体(固定宽度的字体,例如在传统打字机上使用的字体)来显示。 ASCII艺术用于当文字比图像更稳定和更快显示的场合。包括打字机、电传打字机、没有图形的终端,早期的电脑网络,电子邮件和Usenet的新闻信息中。 最简单的ASCII艺术有两三个字母组成,使用文本表达表情。

获取源码,项目讲解视频,基础知识点讲解 欢迎加群616959444

算法

这个算法很简单。首先,我们将ASCII码艺术品中要用到的每一个字符转化成一张图片,并缓存它。然后,我们遍历原始图像,对于每个字符大小的图片块,找出 能最佳匹配它的字符。为了实现这一步,我们首先对原始图像做一些预处理:我们先将图像转换为 灰度图 ,然后让其通过一个阈值滤波器,此时就得到了一个黑白对比图,我们可以将其与每个字符对比并计算差值。接着,对每个图片块选取最相似的字符,一直进行下去,直到整个图像都转换完成。此外,我们还可以根据需要调 整阈值大小来影响对比度,并增强最终的结果。

为了实现这一点,一个非常简单的方法是将红、绿、蓝的值都设置成三种颜色的平均值:

红=绿=蓝 =(红+绿+蓝)/ 3

    A在ascii中定义为01000001,也就是十进制65,有了这个标准后,当我们输入A时,计算机就可以通过ascii码知道输入的字符的二进制编码是01000001。而没有这样的标准,我们就必须自己想办法告诉计算机我们输入了一个A;没有这样的标准,我们在别的机器上就需要重新编码以告诉计算机我们要输入A。ascii码指的不是十进制,是二进制。只是用十进制表示习惯一点罢了,比如在ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H。

在ascii码表中,只包括了一些字符、数字、标点符号的信息表示,这主要是因为计算机是美国发明的,在英文下面,我们使用ascii表示就足够了!但是在汉字输入下面,用ascii码就不能表示了,而汉字只是中国的通用表示,所以如果我们要在计算机中输入汉字,就必须有一个像ascii码的标准来表示每一个汉字,这就是中国的汉字国标码,它定义了汉字在计算机中的一个表示标准。通过这个标准,但我们输入汉字的时候,我们的输入码就转换为区位码,通过唯一的区位码得到这个汉字的字形码并显示出来。当然汉字的区位码在计算机中也是用二进制表示的!

如果这个值低于阈值,我们就将它设置成白色,否则我们将其设置成黑色。最后,我们将图像与每个字符以像素为单位进行比较并计算出平均误差。如下面的图片和代码片段所示:

获取源码,项目讲解视频,基础知识点讲解 欢迎加群616959444

因为颜色是存储在单个整数中,所以我们首先提取单个颜色成分并执行上面我解释的计算。另一个挑战是准确地测量字符尺寸,并以它们为中心作图。在试验了多种方法之后,我最终发现这个方法已经足够好:

不论大牛的程序员还是0基础的小白,小编以及身后的团队都欢迎至极。群里不定期分享学习资料,干货, 学习视频,项目源码

更多干货请多多关注!

下面是一些使用不同字体尺寸和阈值的例子。

获取源码,项目讲解视频,基础知识点讲解 欢迎加群616959444

文章来源:智云一二三科技

文章标题:神级程序员100行代码,用 Java 生成 ASCII 字符画

文章地址:https://www.zhihuclub.com/185155.shtml

关于作者: 智云科技

热门文章

网站地图