【问题标题】:Read image and determine if its corrupt C#读取图像并确定其是否损坏 C#
【发布时间】:2012-01-13 06:12:43
【问题描述】:

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

谢谢

【问题讨论】:

  • 您需要支持哪些图像格式?如果它只是基本的 4 (bmp/png/gif/jpg),您可以使用位图类并尝试加载它们。
  • Bitmap 类可以占用字节。您是要检查它是不是图像,还是要检查它是图像还是有效图像?

标签: c# image corrupt


【解决方案1】:

尝试从文件中创建 GDI+ 位图。如果创建 Bitmap 对象失败,那么您可以假设图像已损坏。 GDI+ 支持多种file formats: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;
    }
}

您也许可以将Exception 限制为仅ArgumentException,但我会在进行切换之前先进行试验。

编辑
如果你有byte[],那么这应该可以:

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

【讨论】:

  • 好的。漂亮的外观正是我所需要的!谢谢。
  • 这应该小心使用。释放使用 using 创建的位图很重要。否则很有可能在检查大量文件时出现 OutOfMemory 异常,因为系统资源不足而不是因为图像损坏。
  • @Kip9000 当 using 语句中的代码完成时,将释放位图。无需明确处理。
  • 有关使用语句的更多信息,请参见此处:msdn.microsoft.com/en-us/library/yh598w02.aspx
  • 我强调使用“使用”很重要。你的代码是正确的
【解决方案2】:

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

第二个在这里; How to check corrupt TIFF images

抱歉,我不知道有任何外部库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多