多语言展示
当前在线:1402今日阅读:167今日分享:16

Mathematica实战范例:[15]Github 头像制作

那在这次经验当中我们来做一个好玩的事情, 先来看这么一段话: 《Github 给无头像用户生成 5x5 像素的 Identicons 头像》这一生成过程使用了用户ID的哈希值,然后根据哈希值每一位的奇偶值来决定对应位置上的像素的开关。这样生成的图像,配上由哈希值决定的颜色,保证可生成大量独一无二的图像[1]。   那在这一经验之中, 让我们一起动手来看看在 Mathematica 下如何实现的吧.
方法/步骤
1

来吧, 我们动手来做做看. 先来看看, Github 的示例图片.

2

拿我的 ID 为例, 求出 MD2 128位的编码, 返回的是十进制. 当然我们更感兴趣的是二进制的形式

3

再次观察 Github 的范例, 整个矩形是左右对称的, 换句话来讲, 我们只需要关注左边部分(5 行, 3列)就够了. 那我们把这 128 位的数据分成 8 组. 前面 5 组为行, 后面 3 组为列.

4

不要忘记, 要求的行与列的奇偶性来觉得对应位置的值(0或1), 那就是一个简单的循环了. 我们可以从下面的代码看出左边部分的矩阵应该是怎样的.

5

上面的代码只生产左边部分, 右边部分是对称的, 我们通过转置之后, 取出第一列与第二列, 再完成两部部分的拼装.

6

现在让我们先把这个矩阵简单的绘制出来, 看看到底怎么一个效果呢.

7

嗯, 还记得吧, 我们还要根据 Hash 的值来生成颜色, 这里要用到 Rescale 函数, 将 哈希值从在 0 到 2^128-1 映射在 0 到 1 之间. 此外除去掉外面的方框, 最后的图形就如下所示:

8

这是我的 ID 的情况, 如果想要看看其他人的呢? 嗯, 并不困难, 打开经验达人秀排行榜网页复制部分的数据, 导入到 Mathematica 之中.

9

导入之后, 必要的过滤整理是需要的. Mathematica 字符串还是蛮强大的, 当然这些是没问题啦.

10

重新运行上述的代码, 不过这次看看排行榜上从 10 到 52 名朋友随机生成的头像图片到底是怎么样的.

推荐信息