关于ASP.NET中输出PNG图片的说明

今天在用ASP.NET向Web请求的响应输出流中写入PNG图片时出现了“GDI+ 中发生一般性错误的异常”,使用的方法是直接将图片保存到响应输出流中,引发异常的代码是:

image.Save(Response.OutputStream, ImageFormat.Png);

究其原因是因为PNG图片的解码器需要双向流,而Response中的输出流OutputStream是无法往回读取的,即它的CanSeek属性等于false。
如果要想在该流中写入PNG图片,我们需要将图片的数据预先读取出来,然后以普通数据流的形式将其写入:

// 读取PNG图片数据到内存流
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Png);
// 将内存流的数据写入到响应输出流
memoryStream.WriteTo(Response.OutputStream);
memoryStream.Close();

发表回复