首页 > 解决方案 > 你如何生成随机模式并将它们转换为图像?

问题描述

我目前正在制作游戏。我有多个用户,每个用户都有一个 id (UUID)。我希望将此 id 用作生成随机模式的密钥,然后生成该玩家的图像。

boolean[] booleanPlayerID = BSUtility.bytesToBooleans(playerID.getBytes(UTF_8));
WritableImage image = new WritableImage(50, 50);
PixelWriter writer = image.getPixelWriter();
int booleanIndex = 0;
for(int y = 0; 50 > y; y++){
    for(int x = 0; 50 > x; x++){
        if(booleanIndex >= booleanPlayerID.length){
            booleanIndex = 0;
        }

        if(booleanPlayerID[booleanIndex]){
            writer.setColor(x, y, Color.BLACK);
        }
        booleanIndex++;
    }
}

假设图像将是 50x50 ......我一直在做的是我取玩家的 id,转换为布尔数组,循环图像像素,也循环布尔数组,如果布尔值为 true,则设置像素颜色变黑。if 语句是为了避免索引越界(我知道我应该将布尔数组转换为与图像中有多少像素相同的长度)...

这确实产生了某种模式,但老实说,这是一个非常糟糕的模式。这些模式通常倾向于彼此非常相似。我想知道是否有人可以提供如何更好地做到这一点的提示/示例。通过我的小研究,我真的找不到太多。然而,我确实找到了我希望获得的模式,我相信它们被称为缠结模式。我真的希望每个用户都有自己独特的图像/图案,但很明显,如果它们有点相似但不一样,那很好。老实说,我不知道这是否可能。

如果您需要一个完整的示例,我可以替换上面的代码。尽管上面的代码应该非常直接地使其成为一个完整的示例(唯一缺少的是生成用户 ID 并将其从字节转换为布尔数组)。

标签: javaimage

解决方案


你所说的被称为IDENTICON.

我实际上不知道它们是如何工作的,但我知道它们使用某种哈希UNIQUE TEXT值并使用该哈希值生成图像。

这是我发现的两个提供源代码的网站,因此如果您有兴趣,可以查看代码并从中提取任何有用的信息。

  1. http://identicon.net/
  2. https://jdenticon.com/

PS。代码在 JavaScript 中,在一个网站上它也在 .NET 和 PHP 中。


推荐阅读