有没有什么好办法把这种有质量问题的图片检测出来啊?

图片样例.zip (7.4 MB)

@joyoes
你好!. 试试这个

try (RasterImage image = (RasterImage)Image.load("13.jpg"))
{
	if (!isContentCorrect(image))
	{
		System.out.println("Image is corrupted!");
	}
	else
		System.out.println("Image is OK!");
}
		
		
private static boolean isContentCorrect(RasterImage image)
{
	try
	{
		image.loadPartialArgb32Pixels(image.getBounds(), new IPartialArgb32PixelLoader()
		{
			@Override
			public void process(Rectangle pixelsRectangle, int[] pixels, Point start, Point end)
			{
				// do nothing, just to enforce loading the pixels from jpeg
			}
		});
	}
	catch (RuntimeException ignore)
	{
		return false;
	}

	return true;
}

1111111111111111111111111.png (112.5 KB)
我用的是C#10,按你的提示写的代码,找不到相关的API啊!

对不起,我在前面的答案中编写了java代码。 我在下面附上C#代码。

public void TestJpeg()
{
	using (RasterImage image = (RasterImage)Image.Load("13.jpg"))
	{
		if (!IsContentCorrect(image))
		{
			Console.WriteLine("Image is corrupted!");
		}
		else
			Console.WriteLine("Image is OK!");
	}
}

private class EmptyProcessor : IPartialArgb32PixelLoader
{
	public void Process(Rectangle pixelsRectangle, int[] pixels, Point start, Point end)
	{
		// do nothing, just to enforce loading the pixels from jpeg
	}
}

private static bool IsContentCorrect(RasterImage image)
{
	try
	{
		image.LoadPartialArgb32Pixels(image.Bounds, new EmptyProcessor());
	}
	catch
	{
		return false;
	}

	return true;
}

111111111111111111111.png (134.7 KB)
不知道为什么我设置了try后,在读取到某一张图片时,还是会报这个异常呢

222222222222222222222.png (87.0 KB)
我换成你给我的示例之后,发现还是这样报错,也不会跳转到catch去执行呢

这看起来像是与下载损坏的文件文件相关的错误。 您可以发送发生此类错误的文件吗?

发生异常的图片.zip (1.7 MB)
无已把测试过程中发生异常图片传上来了!

我没有下载图片文件,我是在本地测试的读取图片信息过程中,发生的异常!

您发送的文件已损坏,无法打开。 里面Aspose。映像发生NullReferenceException。 但这条消息被我发给你的代码截获了。 但Visual Studio开发环境仍然在调试模式下显示此异常。 但在程序的正常执行模式下,不会发生这种异常。 如果在"异常通知"窗口中删除交叉,也可以在开发环境中关闭拦截异常的通知