我想将上传的图片与数据库中的所有图片进行比较,如果匹配则应显示带图片的数据,通过将每个图片转换为二进制see this
,比较简单我正在使用此代码,但它不起作用:
protected void CompareImages(object sender, EventArgs e)
{
if (this.FileUpload1.HasFile)
{
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
string sqlQuery = "SELECT * from [MostWanted] WHERE Photo = @FileName";
using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@FileName", Path.GetFileName(this.FileUpload1.PostedFile.FileName));
conn.Open();
Byte[] bytes2 = (Byte[])cmd.ExecuteScalar();
conn.Close();
if (bytes2 != null)
{
if (bytes.Length == bytes2.Length)
{
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Equal Images')", true);
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Images are not equal')", true);
}
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('File Not found in the table')", true);
}
}
}
}
}
答案 0 :(得分:1)
除非这些图像是同一文件的字面副本,否则简单的二进制比较将不起作用。即使是一点差异或不同的文件格式也会彻底打破它。并且认识到它们的相同之处在于人工智能研究。
如果这些文件与最后一个字节相同,则可以通过为每个图像存储哈希值来加快检查速度。将您尝试添加的图像的哈希值与所有现有图像哈希值进行比较,以预过滤哪些图像哈希值不能相同。您仍然应该进行二进制比较,因为即使使用哈希值,您也可能会出现错误的正数/ colissions(两个不同的输入具有相同的输出)。
由于您还打算存储大量图片,我认为文件流属性可能有所帮助:https://www.simple-talk.com/sql/learn-sql-server/an-introduction-to-sql-server-filestream/
答案 1 :(得分:0)
data varbinary(max)
的列来存储图像文件