.NET 小案例—— 同质不同名图片识别


theme: smartblue

参考

.net6读取文件目录mob649e8162c013的技术博客51CTO博客

c#比较两张图片是否相同_c# 对比两次截屏是否一致-CSDN博客

需求

现在有一系列图像,它们的内容有的可能相同,但是名称不同,需要将他们分辨出来

环境搭建

假设图片都放在同一个目录下,现在2,4,5,6内容相同,需要将他们分辨出来

image.png

代码实现

image.png

``` 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;
    }
}

} ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值