[英]How to Convert image (.png) to base64 string, vice a versa and strore it to a specified location
[英]Convert an image to base64 and vice versa
我想将图像转换为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请求期间发生未处理的异常。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息: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; 因人而异。
警告
System.Drawing命名空间中的类不支持在Windows或ASP.NET服务中使用。 尝试在其中一种应用程序类型中使用这些类可能会产生意外问题,例如服务性能下降和运行时异常。 有关支持的替代方法,请参阅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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.