1

我们从外部来源摄取了大量图像。我想确保已经摄取的图像不会在后端重新摄取。为此,我正在考虑根据图像流生成 GUID,如下所示

File.ReadAllBytes()

或者

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
enter code here

然后我想把它变成一个 CLR(如果有必要的话),然后将 GUID 与图像的元数据一起保存在 SQL 服务器中。不确定该 GUID 的唯一性有多准确。

有什么输入吗?

谢谢

4

2 回答 2

0

正如@Mark Ransom 所建议的那样,您混淆了 GUID 和哈希。GUID是应该是唯一的标识符。它独立于任何输入,只是您可以生成的东西。对于唯一输入,散列应该是唯一的。换句话说,在绝大多数情况下,相同的输入将具有相同的哈希值。

一个常用的散列算法是MD5。这是关于 SO 的类似问题 的链接。

或者,您可以避免使用现有的命令行实用程序编写代码,例如md5sumsortuniq

于 2012-10-03T07:21:10.437 回答
0

是“指纹字符串”算法的一种解决方案。

正如帖子所说,即使文件格式不同或大小不同,您也经常希望将相同的视觉对象映射到相同的字符串。所以这个算法将图像压缩成一个带有 62 色调色板的 8x8 缩略图(你可以用 ImageMagick 实现同样的效果)。

此转换为您提供了 64 个值的图像,范围从 1 到 62。

换句话说,一个短的 base-62 字符串。

于 2014-02-23T10:27:28.097 回答