【发布时间】:2014-06-13 22:15:57
【问题描述】:
这是我的情况: 我有一个控制台应用程序,它以位图格式创建网页屏幕截图,然后将其作为字节数组保存到数据库中。
然后我有一个通用处理程序,它基本上获取字节数组,然后返回图像(它被设置为 html 图像源)。代码如下:
public void ProcessRequest(HttpContext context)
{
int id = Convert.ToInt32(context.Request.QueryString["Id"]);
context.Response.ContentType = "image/jpeg";
MemoryStream strm = new MemoryStream(getByteArray(id));
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
}
public Byte[] getByteArray(int id)
{
EmailEntities e = new EmailEntities();
return e.Email.Find(id).Thumbnail;
}
(那段代码不是我自己写的)
尽管图像当然仍以位图的形式返回,而且尺寸太大。 这就是为什么我想将它作为压缩的 jpg 或 png 返回,只要它很小。
所以我的问题是:有什么可能性可以做到这一点而不必将图像直接保存到文件系统?
提前感谢您的回复。
【问题讨论】:
-
嗯,这在技术上可能是一个解决方案。但据我所知,您不能只在通用处理程序中“返回”某些内容。或者我只是不知道怎么做。
-
如果 dbase 中的 blob 已压缩为 JPEG 文件格式,您现在拥有的代码只能与
image/jpegMIME 类型一起正常工作。所以你不能通过编码图像来取得成功,这已经完成了。仅降低质量或存储较小的图像是一种选择。 -
好的。降低质量很好,但是如何从字节数组中做到这一点?
标签: c# bytearray image-compression image-conversion generic-handler