读取图像并确定其是否损坏C#

读取图像并确定其是否损坏C#,c#,image,corrupt,C#,Image,Corrupt,如何确定作为原始字节的图像是否已损坏。是否有任何开源库可以为C#中的多种格式处理此问题 谢谢尝试从该文件创建GDI+位图。如果创建位图对象失败,则可以假定图像已损坏。GDI+支持多种格式:BMP、GIF、JPEG、Exif、PNG、TIFF 类似于此功能的功能应该可以工作: public bool IsValidGDIPlusImage(string filename) { try { using (var bmp = new Bitmap(filename))

如何确定作为原始字节的图像是否已损坏。是否有任何开源库可以为C#中的多种格式处理此问题


谢谢

尝试从该文件创建GDI+位图。如果创建位图对象失败,则可以假定图像已损坏。GDI+支持多种格式:BMP、GIF、JPEG、Exif、PNG、TIFF

类似于此功能的功能应该可以工作:

public bool IsValidGDIPlusImage(string filename)
{
    try
    {
        using (var bmp = new Bitmap(filename))
        {
        }
        return true;
    }
    catch(Exception ex)
    {
        return false;
    }
}
public bool IsValidGDIPlusImage(byte[] imageData)
{
    try
    {
        using (var ms = new MemoryStream(imageData))
        {
            using (var bmp = new Bitmap(ms))
            {
            }
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
您可以将
异常
限制为仅
ArgumentException
,但在切换之前,我会先尝试一下

编辑
如果您有一个
字节[]
,那么这应该可以:

public bool IsValidGDIPlusImage(string filename)
{
    try
    {
        using (var bmp = new Bitmap(filename))
        {
        }
        return true;
    }
    catch(Exception ex)
    {
        return false;
    }
}
public bool IsValidGDIPlusImage(byte[] imageData)
{
    try
    {
        using (var ms = new MemoryStream(imageData))
        {
            using (var bmp = new Bitmap(ms))
            {
            }
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

您可以查看这些链接以获取想法。 第一个在这里;

第二个在这里


很抱歉,我不知道有任何外部库可用于此操作。

您需要支持哪些图像格式?如果只是基本4(bmp/png/gif/jpg),您可以使用位图类并尝试加载它们。位图类的可能副本可能需要字节。您是要检查它是否是图像还是要检查它是否是图像和有效图像?好的。漂亮的外表正是我需要的!谢谢。这个应该小心使用。释放使用创建的位图非常重要。否则,检查大量文件时很可能会出现OutOfMemory异常,这是因为系统资源不足,而不是因为图像已损坏。@Kip9000 using语句中的代码完成后,位图将被释放。无需显式处理。有关使用语句的更多信息,请参见此处:我强调使用“using”很重要。你的代码是正确的