我们有一个从远程服务器提取图像的过程。大多数时候,我们很高兴,图像有效,我们不会超时等等。但是,每隔一段时间我们就会看到类似这样的错误:
Unhandled Exception: System.Runtime.InteropServices.ExternalException: A generic
error occurred in GDI+.
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderPa
rameters encoderParams)
at ConsoleApplication1.Program.Main(String[] args) in C:\images\ConsoleApplic
ation1\ConsoleApplication1\Program.cs:line 24
在无法在本地重现之后,我们仔细观察了图像,发现有文物,让我们怀疑是腐败。
仅使用相关图像创建了一个丑陋的小单元测试,并且无法像预期的那样在Windows 7上重现错误。但是在Windows Server 2008上运行我们的单元测试后,我们每次都会看到此错误。
有没有办法在编写jpegs时指定非严格性?我们可以使用某种检查/修复方法吗?
单元测试代码段:
var r = ReadFile("C:\\images\\ConsoleApplication1\\test.jpg");
using (var imgStream = new MemoryStream(r))
{
using (var ms = new MemoryStream())
{
var guid = Guid.NewGuid();
var fileName = "C:\\images\\ConsoleApplication1\\t" + guid + ".jpg";
Image.FromStream(imgStream).Save(ms, ImageFormat.Jpeg);
using (FileStream fs = File.Create(fileName))
{
fs.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
}
}
}
答案 0 :(得分:1)
AFAIK,不,在解码JPG文件时,没有办法要求GDI +更宽松。在任何有消费者上传任意JPG文件的应用程序中,您会看到GDI +异常中的一些常规错误一直被抛出。您可以尝试使用WPF来读取您的图像,但我怀疑它也会反对损坏图像。
答案 1 :(得分:0)
也许这不是你的直接问题的答案,但是你为什么不拉图像和它的md5(或任何其他哈希)来验证这个图像的正确性?