مقایسه دو تصویر در Asp.net
چهارشنبه 9 دی 1394در این مقاله قصد داریم که دو تصویر را در اندازه و تشابه عکس ها و تعداد پیکسل ها با هم مقایسه نماییم و بر اساس باینری عکس ها را مقایسه میکنیم.
ما باید بر اساس باینری عکس ها را مقایسه نماییم.
byte[] _barray1; byte[] _barray2;
در زیر کد خواندن عکس ها از آپلود تصاویر:
if (FileUpload1.HasFile && FileUpload2.HasFile) { using(BinaryReader reader1=new BinaryReader(FileUpload1.PostedFile.InputStream)) { using (BinaryReader reader2=new BinaryReader(FileUpload2.PostedFile.InputStream)) { _barray1 = reader1.ReadBytes(FileUpload1.PostedFile.ContentLength); _barray2 = reader2.ReadBytes(FileUpload2.PostedFile.ContentLength); } } }
پاس دادن دو آرایه برای مقایسه امکان پذیر نیست ابتدا به صورت آرایه دریافت می نماییم و آرایه را به بایت تصاویر و پس از آن تصاویر را به bitmap تعریف می نماییم.
//Converting Byte Array To Image And Then Into Bitmap ImageConverter ic = new ImageConverter(); Image img = (Image)ic.ConvertFrom(_barray1); Bitmap bmp1 = new Bitmap(img); Image img1 = (Image)ic.ConvertFrom(_barray2); Bitmap bmp2 = new Bitmap(img1); //Calling Compare Function if (Class1.Compare(bmp1,bmp2)==Class1.CompareResult.ciCompareOk) { Label1.Visible = true; Label1.Text = "Images Are Same"; } else if (Class1.Compare(bmp1,bmp2)==Class1.CompareResult.ciPixelMismatch) { Label1.Visible = true; Label1.Text = "Pixel not Matching"; } else if (Class1.Compare(bmp1,bmp2)==Class1.CompareResult.ciSizeMismatch) { Label1.Visible = true; Label1.Text = "Size Is Not Same"; }
این روش کار مقایسه تصویر را انجام می دهد این روش هر پیکس را با استفاده از SHA256 مقایسه و بعد ذخیره خواهد کرد.
public enum CompareResult { ciCompareOk, ciPixelMismatch, ciSizeMismatch }; public static CompareResult Compare(Bitmap bmp1, Bitmap bmp2) { CompareResult cr = CompareResult.ciCompareOk; //Test to see if we have the same size of image if (bmp1.Size != bmp2.Size) { cr = CompareResult.ciSizeMismatch; } else { //Convert each image to a byte array System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter(); byte[] btImage1 = new byte[1]; btImage1 = (byte[])ic.ConvertTo(bmp1, btImage1.GetType()); byte[] btImage2 = new byte[1]; btImage2 = (byte[])ic.ConvertTo(bmp2, btImage2.GetType()); //Compute a hash for each image SHA256Managed shaM = new SHA256Managed(); byte[] hash1 = shaM.ComputeHash(btImage1); byte[] hash2 = shaM.ComputeHash(btImage2); //Compare the hash values for (int i = 0; i < hash1.Length && i < hash2.Length && cr == CompareResult.ciCompareOk; i++) { if (hash1[i] != hash2[i]) cr = CompareResult.ciPixelMismatch; } shaM.Clear(); } return cr; }
تصویر خروجی به صورت زیر است:
- ASP.net
- 2k بازدید
- 4 تشکر