检测损坏的图像文件

Detect a corrupt image file

大家好,你们这些聪明人,

我在这里面临着一些挑战。 我应该创建几个不同的 PDF,其中包含多个(不相似的)图像。

不幸的是,有些图像是 corrupt/defect。这导致将特定 PDF 创建为 fail/dump.

Is there a way I can test the image prior to creation of the PDF?

请对我温柔一点。我不是专家。

我发现 System.Drawings.Image 可以测试一些格式。我猜总比没有好(它会显着减少子集)。

但是在使用 iTextSharp.text.Image 创建 PDF 时。然后我不知道如何使用 the System.Drawings.Image 因为当我尝试 Image newImage = Image.FromFile("SampImag.jpg"); 然后它(图像)指的是 iTextSharp.text.Image class.

System.Drawings.Image 是抽象的,所以我尝试创建一个子class。

public class ImageTest : System.Drawing.Image
    {

    }

现在我收到错误消息:"Error 1 The type 'System.Drawing.Image' has no constructors defined" 试图调查我可以使用哪些构造函数给了我这个尝试。

public class ImageTest : System.Drawing.Image
    {
      ImageTest(string filename);
      {
      }
    }

但这行不通。

如果您需要与调查此事相关的信息,请通知我。

提前致谢。

捕获 OutOfMemoryException 有效:

try
{
    // Using System.Drawing.Image
    System.Drawing.Image img = (System.Drawing.Bitmap)System.Drawing.Image.FromFile("myimage.png");
}
catch (OutOfMemoryException ex)
{
    // Handle the exception...
}

我用这段代码测试了它:

try
{
    System.Drawing.Image img = (System.Drawing.Bitmap)System.Drawing.Image.FromFile("myimage.png");
}
catch (OutOfMemoryException ex)
{
    Console.WriteLine("Error loading image...");
}

然后我在.png文件中删除了几个字符,控制台显示:

Error loading image...

并将其转换为 iTextSharp.text.Image

你应该可以使用

public bool IsValidImageFile (string imageFile)
{
    try
    {
        // the using is important to avoid stressing the garbage collector
        using (var test = System.Drawing.Image.FromFile(imageFile))
        {
             // image has loaded and so is fine
             return true;
        }
    }
    catch
    {
        // technically some exceptions may not indicate a corrupt image, but this is unlikely to be an issue
        return false;
    } 
}