c# - मैं कैसे तुलना करूं अगर 2 छवियाँ हैश बाइट्स का उपयोग कर एक ही हैं?



image hash (1)

मुझे बाइट सरणी की तुलना करने के लिए 3 तरीके पता हैं:

  • बाइट []। SequenceEqual (बाइट [])
  • System.Text.Encoding.UTF8.GetString (बाइट []) ==
  • कन्वर्ट.ToBase64String (बाइट []) ==

अपने कोड के लिए आप यह कोशिश कर सकते हैं:

   Console.WriteLine("SEQUENCE EQUAL: " + (HashImage(im1).SequenceEqual(HashImage(im2)) ? "TRUE" : "FALSE") + " (easiest way)");
   Console.WriteLine("UTF8 STRING:    " + (System.Text.Encoding.UTF8.GetString(HashImage(im1)) == System.Text.Encoding.UTF8.GetString(HashImage(im2)) ? "TRUE" : "FALSE") + " (conversion to utf string - not good for display or hash, good only for data from UTF8 range)");
   Console.WriteLine("HASH STRING:    " + (Convert.ToBase64String(HashImage(im1)) == Convert.ToBase64String(HashImage(im2)) ? "TRUE" : "FALSE") + " (best to display)");

   Console.WriteLine("1: " + Convert.ToBase64String(HashImage(im1)));
   Console.WriteLine("2: " + Convert.ToBase64String(HashImage(im2)));

बिटमैप इम 2 के आरंभ होने के बाद इसे अपने कोड में जोड़ें और आउटपुट विंडो में परिणाम देखें। आप इनमें से किसी एक को तुलना और मूल्यांकन करने के लिए उपयोग कर सकते हैं यदि सरणी समान है

नोट : System.Text.Encoding.UTF8.GetString इस मामले में उपयोग के लिए उपयुक्त नहीं है (तस्वीर से हैश डेटा)। नीचे @CodesInChaos पर टिप्पणी देखें

private void button1_Click(object sender, EventArgs e)
{
    Bitmap im1 = new Bitmap(@"C:\Users\user\Downloads\CaptchaCollection\1.png");
    Bitmap im2 = new Bitmap(@"C:\Users\user\Downloads\CaptchaCollection\2.png");

    if (HashImage(im1) == HashImage(im2))
    {
        MessageBox.Show("Same Image");
    }

    else
    {
        MessageBox.Show("Different Image");
    }
}

यदि बटन क्लिक किया जाता है तो यह इन 2 छवियों की तुलना करेगा।

यहां एक कोड है जो कि एक छवि हैश के लिए उपयोग किया जाता है

public byte[] HashImage(Bitmap image)
{
    var sha256 = SHA256.Create();

    var rect = new Rectangle(0, 0, image.Width, image.Height);
    var data = image.LockBits(rect, ImageLockMode.ReadOnly, image.PixelFormat);

    var dataPtr = data.Scan0;

    var totalBytes = (int)Math.Abs(data.Stride) * data.Height;
    var rawData = new byte[totalBytes];
    System.Runtime.InteropServices.Marshal.Copy(dataPtr, rawData, 0, totalBytes);

    image.UnlockBits(data);

    return sha256.ComputeHash(rawData);
}

तो मैं दोनों छवियों की तुलना करने के लिए HashImage() पद्धति का उपयोग कैसे कर सकता हूं यदि वे समान रूप से या नहीं हैं?

मैंने उन 2 छवियों की तुलना करने की कोशिश की जो स्पष्ट रूप से समान हैं लेकिन वे ठीक से तुलना करने के लिए काम नहीं कर रहे हैं इसके बजाय मैं यह देख रहा हूं कि यह एक अलग छवि है।

मैंने यह भी कोशिश की, लेकिन यह या तो काम नहीं कर रहा है।

if (HashImage(im1).Equals(HashImage(im2)))

अद्यतनः मैंने इसे करने की कोशिश की है लेकिन यह या तो काम नहीं कर रहा है।

if (ReferenceEquals(HashImage(im1),HashImage(im2)))




hashcode