美好的一天,
在我正在开发的网站中,我想向用户显示由 来自他的电子邮件地址的哈希值。
我应该生成分形吗?
如果是这样,我怎样才能使它们“独特”或更具体地说,更容易被刚刚拥有的用户识别 已登录?
我非常喜欢 Stackoverflow 为新用户提供的关联用户图片。
我正在使用 PHP GD。
提前感谢您提供任何实现此目的的提示。
这里有一些您可以运行的源代码: http://www.exorithm.com/algorithm/view/unique_image
有点像 SOF 图像。
如果您希望远程完成,您可以使用类似 http://robohash.org/ 或 gravatar http://en.gravatar.com/site/implement/images/(在默认部分)
这可能对你有帮助;这是使用图像干预库的简单实现。
function unique_image($string, $img_w = 400)
{
$hash = hash('md5', $string);
$bytes = mb_strlen($hash, '8bit');
$image = Image::canvas($img_w, $img_w, array_map('ord', str_split(substr($hash, -3, 3))));
# Set color blocks.
$blocks = [];
for ($i = 0; $i < $bytes; $i++) $blocks[floor($i / 3)][] = ord($hash[$i]);
$image_area = pow($img_w, 2);
$square_area = $image_area / count($blocks);
$sqr_w = sqrt($square_area);
$cols = floor($img_w / $sqr_w);
$spacing = ($img_w - $cols * $sqr_w) / 2;
for ($x = 0; $x < $cols; $x++) for ($y = 0; $y < $cols; $y++) {
$p['x1'] = $spacing + $sqr_w * $x;
$p['y1'] = $spacing + $sqr_w * $y;
$p['x2'] = $spacing + $sqr_w * ($x + 1);
$p['y2'] = $spacing + $sqr_w * ($y + 1);
$image->rectangle($p['x1'], $p['y1'], $p['x2'], $p['y2'], function ($draw) use ($x, $y, $blocks) {
$block = $blocks[$x + $y];
# Set square background (RGB), and the border.
$draw->background([$block[0], ($block[1] ?? 0), ($block[2] ?? 0)]);
$draw->border(1.8, '#aaa');
});
}
# Return image.
return $image->response();
}
有一个网络服务允许您使用哈希字符串作为输入并根据用户的设置接收唯一的图像。 https://www.agorhash.com