什么是哈希头像?
注册github或者stackoverflow时,系统会自动给一个头像
这个头像很像二维码,却又比二维码稍微规律且好看一些
就像下面这样
这种头像是根据用户信息生成的,所以每一个人都不一样
GoBootcamp有这么个练习
解题思路
观察这些图像,可以发现每一张图片都是由一个个小方块组成的,且都只有两种状态
很容易联想到二进制位0和1
这样一张图片就等价于一串二进制序列
将用户信息转化成相同长度的二进制序列可以用hash函数来转一下
这也就是为什么有些译文将Identicons翻译成哈希头像的原因
我在写代码时使用了golang标准库里面的md5函数
对任意字符串求hash得到长度为16的byte数组
1byte = 8bit,也就是8*16 = 128位的二进制序列
这里用到了以前研究bitmap时学到的一个位操作来获取byte指定位置的bit值
在我的思路里,每一个bit代表一个小色块
水平方向8个,竖直方向16个,再在竖直方向作下镜像翻转,正好是一个正方形
画图
golang的文档实在是恶心
godoc生成的文档都是在逼人看源码的节奏
我是直接使用RGBA的set函数设置点的颜色来画矩形的
也不知道是不是最高效的方法
最终生成的图片如下