C# asp中,如何把二进制图片流转换成图片,并显示在网页上的一些注意事项

最近在把二进制图片流转换成图片时遇到一些问题,所以就在这里总结一下,主要是给自己看,也供大家分享经验。

环境:mongodb,vs2013

语言:c#


缘何而起:

把图片存入mongodb中后,图片全以二进制的格式存储在数据库中,而我想把图片展现在网页上,这就需要实现把二进制图片流转换成图片,并显示在网页上。简单的做法总结起来就是:在另外一个页面添加image控件,然后将url指向你输出图像的那个页面,如Image.ImageUrl=”Picture.aspx”;


具体实现是:

现在我有A页面,A页面的cs里包含我下面要讲的所有代码(包括response语句),但是A页面上什么控件都没有。然后我新生成一个B页面,在页面上新建一个image控件,其中它的imgurl指向A页面。


以下是在A页面的cs上的部分代码,注意,此部分代码一定要放在Page_load中:

//声明一个存放二进制数据的数组

 byte[]  buff = new byte[gfs.Length];
//从mongodb的gfs对象(我的图片对象是存储在gridfs中的)中读入数据到buff
gfs.Read(buff, 0, buff.Length);

//然后是常规的把图片流写入当前页面的步骤
Response.ContentType = "image/jpeg";
//写入二进制流
Response.BinaryWrite(buff);


然后运行B页面,此时问题来了,它一直显示一个图片加载失败的图标,但是我如果只运行A界面(就是直接把图片导入到此页面的方法,它会弹出一个“您是要加载还是下载”的对话框),所下载下来的图用本地图片浏览器浏览没有一点问题,图片也是我要的图片。


经过一番查找和研究后,发现是我指定图片的格式出错了,我在数据库中存储的图片格式是tif,而在页面上是不支持加载tif格式的图片的。所以我这种直接把tif的流传给页面是不允许的。

现在的解决方法是,新生成一个“.jpg”的图片,然后再进行之后的图片呈现操作,这样显示图片就没问题了。但是我心中还是有不解:难道tif的图片在网页上呈现方式只有这一种?非要把图片的格式转化后才能使用吗?如果在有大量请求向服务器要求呈现图片的情况下,会不会对服务器有很大的负担?所以我写下这篇文章,也希望看到此文章,对这类问题感兴趣的csdner们和我一起探究。


ps.为什么浏览器 / 网页不支持tiff格式?这是因为tiff格式是针对品质要求比较高的图片对象,这就会保留很多冗余信息(但对于那些对图片像素啊,清晰度啊等等有要求的人,这些就不是冗余信息了),而网页加载追求的是速度,所以就不支持这种格式了。(这是查的资料,如有说错,希望大家指正)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值