Raz*_*zor 22 .net c# asp.net gdi+ image
例外:
GDI +中发生了一般错误.System.Drawing.Image.Save(String filename)的System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)at System.Drawing.Image.Save(String filename,ImageFormat format)at System.Drawing.Image.Save(String filename)
码:
byte[] bitmapData = new byte[imageText.Length];
MemoryStream streamBitmap;
bitmapData = Convert.FromBase64String(imageText);
streamBitmap = new MemoryStream(bitmapData);
System.Drawing.Image img = Image.FromStream(streamBitmap);
img.Save(path);
Run Code Online (Sandbox Code Playgroud)
我们将base64字符串转换为MemoryStream,然后创建System.Drawing.Image(Image.FromStream(streamBitmap)).最后,图像保存在临时文件中.
奇怪的是,当Web服务器上的活动(并发用户数)很高并且问题在IISRESET或应用程序池回收后暂时解决时,问题似乎发生了......
==>垃圾收集器问题?
我已经检查了TEMP文件夹的权限......
Sur*_*amy 25
从Stream加载图像时,必须在图像的生命周期内保持流打开,请参阅MSDN Image.FromStream.
我认为异常是由于内存流甚至在图像处理之前就关闭了.您可以像这样更改代码
byte[] bitmapData = new byte[imageText.Length];
bitmapData = Convert.FromBase64String(imageText);
using (var streamBitmap = new MemoryStream(bitmapData)
{
using (img = Image.FromStream(streamBitmap))
{
img.Save(path);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是一些讨论类似问题的线程的链接
绘制图像时:System.Runtime.InteropServices.ExternalException:GDI中发生一般错误
小智 8
确保您指定的路径有效.使用前面的答案(使用内存流上的使用),如果文件路径不存在,您仍可能会收到"GDI +中的通用错误"这一确切错误.将创建该文件,目录路径必须存在.