SSOAAG
分类:技术
好吧,标题的意思其实是 Some Sort Of Ascii Art Generator……
把这两天的无聊成果放 GitHub 上了,按标题的意思可以理解为某种字符画生成器。
一句话解释原理
在一个 HTML 文档里,把一系列「■」字符作为像素点,并用 <span>
元素为每一个字符指定颜色。再把行距、字间距变小,就形成了一个画布。把图片中每一个像素的颜色赋值给对应的「■」字符就可以产出该图片的马赛克版本(类似于放大 N 倍后的效果)。而根据这个像素点的颜色值可以计算出灰度,再根据灰度的深浅选择相应的字符代替「■」字符(比如灰度小于 64 选 @
、小于 128 选 :
、其余选 .
),就可以产出该图片的字符画版本了。
好吧,这不是一句话,这是一段话 Orz...
Bitmap
嗯,挑了个很矬的名字命名这个类。Bitmap
类主要是为了读取位图文件中的颜色数据而生的。在 Load
时解析位图文件内容,无论原来是什么格式,内部都用 0xAARRGGBB 的形式保存……………………(这是设想)
现实:色深和压缩方式好多……于是目前只把最简单的未压缩版本的 1位色(黑白)/ 4位色 / 8位色 / 16位色 / 24 位色 / 32 位色位图读取实现了。
于是 DIB Header 是 BITMAPINFOHEADER
版本及以后的未压缩位图应该都可以读取了,理论上 4 色位图也支持读取,但我真心没有找到可以产出一个 4 色位图的办法,汗~
喂, 方块不算 ASCII 吧...
= = 方块输出是一个中间阶段(用来看着玩)……根据灰度把方块换成正常的ASCII字符才是最终的字符画 :)
那个程序运行以后 mosaic.html 是全方块输出结果,ascii.html 是 Ascii Art 输出……