参考
.net6读取文件目录_mob649e8162c013的技术博客_51CTO博客
c#比较两张图片是否相同_c# 对比两次截屏是否一致-CSDN博客
需求
现在有一系列图像,它们的内容有的可能相同,但是名称不同,需要将他们分辨出来
环境搭建
假设图片都放在同一个目录下,现在2,4,5,6内容相同,需要将他们分辨出来
代码实现

ini
using System.Drawing;
internal class Program
{
private static void Main(string[] args)
{
// 创建目录信息对象
DirectoryInfo directoryInfo = new DirectoryInfo("C:\\Users\\Administrator\\Desktop\\file");
// 获取目录下的所有文件
FileInfo[] files = directoryInfo.GetFiles();
Dictionary<Bitmap, List<string>> dictionary = new Dictionary<Bitmap, List<string>>();
// 遍历文件
foreach (FileInfo file in files)
{
// 将 Image 对象转换为位图格式的数据
Bitmap key = Image.FromFile(file.FullName) as Bitmap;
string value = file.Name;
handlePic(ref dictionary, key, value);
}
foreach(var item in dictionary)
{
List<string> values = item.Value;
if (values.Count() > 1)
{
string res = "";
foreach (string value in values)
{
res += value + ",";
}
Console.WriteLine("发现了重复的图片:分别为"+ res);
}
}
}
public static void handlePic(ref Dictionary<Bitmap, List<string>> dic, Bitmap key,string value)
{
bool isExist = false;
Bitmap temp = null;
foreach(var item in dic)
{
if (ImageCompareString(item.Key, key))
{
isExist = true;
temp = item.Key;
break;
};
}
if (isExist)
{
dic[temp].Add(value);
}
else
{
dic.Add(key, new List<string> { value });
}
}
/// <summary>
/// 比较两张图片是否完全一样
///
/// 速度快,但对大图片可能有些误差
///
/// (方法:将图片转换为Base64后,匹配Base64)
/// </summary>
public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
{
MemoryStream ms = new MemoryStream();
firstImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
String firstBitmap = Convert.ToBase64String(ms.ToArray());
ms.Position = 0;
secondImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
String secondBitmap = Convert.ToBase64String(ms.ToArray());
if (firstBitmap.Equals(secondBitmap))
{
return true;
}
else
{
return false;
}
}
}