【问题标题】:how to convert an image's stream to GUID如何将图像的流转换为 GUID
【发布时间】:2012-10-03 03:30:02
【问题描述】:

我们从外部来源提取了大量图像。我想确保已经摄取的图像不会在后端重新摄取。为此,我正在考虑根据图像流生成 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 Server 中。不确定该 GUID 的唯一性有多准确。

任何输入?

谢谢

【问题讨论】:

  • 您不会根据输入数据创建 GUID,它更像是一个随机数。我认为您正在寻找某种哈希值。

标签: image-processing


【解决方案1】:

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

常用的哈希算法是MD5。这是关于 SO 的类似问题的link

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

【讨论】:

  • 散列(一般来说)保证是唯一的。
  • 一般来说,你是对的。使用当前的哈希算法(如 MD5),确实会发生冲突,但在实践中非常罕见。因此,实际上,它非常接近得到保证。我已经更改了答案的措辞以避免误导人们。
  • 虽然这是真的,但有没有办法将 MD5(或任何其他散列函数结果)可靠地转换为 GUID?或者,更具体地说 - 将 MD5 转换为 128 位值,格式化为由连字符分隔的十六进制数字块
【解决方案2】:

Here's one solution 用于“指纹字符串”算法。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2015-02-11
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多