最近的开发中让同事在与第三方的交互中写了一个接口,用来数据交互其中有图片流的接收这一部分。
突然一天发现,有一张图片接收了以后不正确,试了各种方式把文件流都记录下来在线测试了一下也能转换出正确的图片,但是为什么项目里的代码就不行,而且也仅是这样图片。
代码如下:
1 byte[] bytes = Convert.FromBase64String(avatar); 2 3 using (MemoryStream mStream = new MemoryStream(bytes)) 4 { 5 using (Bitmap bmp = new Bitmap(mStream)) 6 { 7 8 if (suffix.ToLower() == "jpg") 9 { 10 bmp.Save(path, ImageFormat.Jpeg); 11 } 12 if (suffix.ToLower() == "png") 13 { 14 bmp.Save(path, ImageFormat.Png); 15 } 16 if (suffix.ToLower() == "bmp") 17 { 18 bmp.Save(path, ImageFormat.Bmp); 19 } 20 } 21 }
后来,客户的一句话提醒了我,他的图片是从PNG直接改的后缀名为jpg
然后我就试了下果然是这个问题,如果使用 bmp.Save(path, ImageFormat.Png)去保存就没有问题。
于是,退而求其次,我把就写了个demo把代码做出如下就该就没有问题
1 byte[] bytes = Convert.FromBase64String(avatar); 2 3 using (MemoryStream mStream = new MemoryStream(bytes)) 4 { 5 using (Bitmap bmp = new Bitmap(mStream)) 6 { 7 bmp.Save(path); 8 9 //if (suffix.ToLower() == "jpg") 10 //{ 11 // bmp.Save(path, ImageFormat.Jpeg); 12 //} 13 //if (suffix.ToLower() == "png") 14 //{ 15 // bmp.Save(path, ImageFormat.Png); 16 //} 17 //if (suffix.ToLower() == "bmp") 18 //{ 19 // bmp.Save(path, ImageFormat.Bmp); 20 //} 21 } 22 }
这个问题就在于当你不设置ImageFormat的时候确实没有出错,虽然我不明白具体的原因是什么但是我觉得以后还是不要多此一举的好,而且如上段代码还严重的限制的对方图片的格式。