【问题标题】:Compare image of type image by image stored in file system通过存储在文件系统中的图像比较图像类型的图像
【发布时间】:2016-10-31 18:08:04
【问题描述】:

如果我有以下情况:

存储为文件系统的一组图像(JPG)。每个图像都有这样的名称:

标识符与学号连接

例如:356782377.jpg

我有一个具有以下结构的表:

TransTime       DateTime
Photo           image
Identifier      int
StudentNumber   int

每个 Trans 在 db 表中都有一个学生图像,在文件系统中具有等价物。 最初表格记录是完整的,除了学号。

前:

    TransTime             Photo    identifier    student number
2016-08-05 18:39:00       image      35678             ??

我想通过将 db 中类型(图像)的照片与存储在文件系统中的图像进行比较,从文件系统中的图像文件名中提取学生编号(2377) 部分,并在 db 中设置交易的学生编号。

我想将两者(数据库中的图像和文件系统中的图像)都转换为字节并比较它们以用正确的数字更新空学生。 这是最适合我的问题的解决方案吗?

【问题讨论】:

  • 您应该停止使用图像数据类型。它已经被弃用了十多年(从 sql server 2005 开始),取而代之的是 varbinary(max)。 msdn.microsoft.com/en-us/library/ms187993.aspx
  • @SeanLange :我必须适应这种类型,因为它是机器的数据库,而不是我的数据库
  • 有多种算法比较两个文件比比较字节更有效。除了比较两张图片之外,您还希望解决什么样的问题?

标签: c# asp.net sql-server performance sql-server-2012


【解决方案1】:

一般当你需要比较两个文件是否相等时,特别是如果你希望对同一个文件进行多次比较,最好生成文件的哈希摘要并将其与文件一起存储在数据库。然后,当您需要将新文件与数据库中的文件进行比较时,您可以生成新文件的摘要并将其与数据库中的文件进行比较。

SHA256 摘要使用 32 个字节。 MD5 哈希使用 16。由于您不需要将其设为加密级别,因此如果您需要进行大量比较,则可以使用 MD5。

如果您无法修改数据库架构和/或数据以添加摘要,那么您所提议的可能是您唯一的选择。

【讨论】:

  • 我想通过存储在 db 中的 typeimage 的图像来比较存储在文件系统中的图像。它是机器的数据库,所以我必须适应这种类型
【解决方案2】:

标识符是唯一的吗?您真的要对文件进行二进制比较,还是只想获取给定图像的学号?

如果标识符是唯一的,并且您只需要学生编号(不需要确保二进制文件相同),我会检查文件系统上的文件名并根据需要更新数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2010-09-16
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多