原理实际上挺简单的, 在白色背景下, 字符 $ 会有比较大面积的黑, 而字符 + 相对就淡了很多, 毫无疑问, 空格就是纯白了....所以, 只要把一些字符按照 白, 灰, 黑 排序, 并把这些字符映射为 0-255 的灰度值, 就可以根据图片生成更生动的字符画了....OK, 我们先扯回来, 说下灰度的映射算法, 也是很容易理解的, 上面的字符一共有 69 个, 0-255 一共有 256 个字符, 计算出比率 ratio 然后直接把字符取出来即可:
/**
* ASCII...";
/**
* 69/256
*
* @type {Number}
*/
const ratio = charset.length / 256;
/**
* 颜色值转换为 ASCII 字符...上面的 Python 代码用的是这个公式, 参考知乎:
Gray = 0.2126 R' + 0.7152 G' + 0.0722 B'
还有另一种, 这个是我实验后发现的, 用这个方法生成的图案细节会多一些