将图像转换为base64,反之亦然

我想将图像转换为base64并再次返回图像。 这是我到目前为止尝试的代码和错误。 有什么建议吗?

public void Base64ToImage(string coded) { System.Drawing.Image finalImage; MemoryStream ms = new MemoryStream(); byte[] imageBytes = Convert.FromBase64String(coded); ms.Read(imageBytes, 0, imageBytes.Length); ms.Seek(0, SeekOrigin.Begin); finalImage = System.Drawing.Image.FromStream(ms); Response.ContentType = "image/jpeg"; Response.AppendHeader("Content-Disposition", "attachment; filename=LeftCorner.jpg"); finalImage.Save(Response.OutputStream, ImageFormat.Jpeg); } 

错误是:

参数无效。

描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.ArgumentException:参数无效。

来源错误:

 Line 34: ms.Read(imageBytes, 0, imageBytes.Length); Line 35: ms.Seek(0, SeekOrigin.Begin); Line 36: finalImage = System.Drawing.Image.FromStream(ms); Line 37: Line 38: Response.ContentType = "image/jpeg"; 

源文件:e:\ Practice Projects \ FaceDetection \ Default.aspx.cs行:36

您正在读取空流,而不是将现有数据( imageBytes )加载流中。 尝试:

 byte[] imageBytes = Convert.FromBase64String(coded); using(var ms = new MemoryStream(imageBytes)) { finalImage = System.Drawing.Image.FromStream(ms); } 

此外,您应该努力确保处理finalImage ; 我建议:

 System.Drawing.Image finalImage = null; try { // the existing code that may (or may not) successfully create an image // and assign to finalImage } finally { if(finalImage != null) finalImage.Dispose(); } 

最后,请注意ASP.NET上不支持 System.Drawing; 因人而异。

警告

不支持在Windows或ASP.NET服务中使用System.Drawing命名空间中的类。 尝试在其中一种应用程序类型中使用这些类可能会产生意外问题,例如服务性能下降和运行时exception。 有关支持的替代方法,请参阅Windows Imaging Components。

MemoryStream.Read方法将MemoryStream中的字节读入指定的字节数组。

如果要将字节数组写入MemoryStream ,请使用MemoryStream.Write方法 :

 ms.Write(imageBytes, 0, imageBytes.Length); ms.Seek(0, SeekOrigin.Begin); 

或者,您可以简单地将字节数组包装在MemoryStream中 :

 MemoryStream ms = new MemoryStream(imageBytes);