最近在把二进制图片流转换成图片时遇到一些问题,所以就在这里总结一下,主要是给自己看,也供大家分享经验。
环境:mongodb,vs2013
语言:c#
缘何而起:
把图片存入mongodb中后,图片全以二进制的格式存储在数据库中,而我想把图片展现在网页上,这就需要实现把二进制图片流转换成图片,并显示在网页上。简单的做法总结起来就是:在另外一个页面添加image控件,然后将url指向你输出图像的那个页面,如Image.ImageUrl=”Picture.aspx”;
具体实现是:
现在我有A页面,A页面的cs里包含我下面要讲的所有代码(包括response语句),但是A页面上什么控件都没有。然后我新生成一个B页面,在页面上新建一个image控件,其中它的imgurl指向A页面。
以下是在A页面的cs上的部分代码,注意,此部分代码一定要放在Page_load中:
gfs.Read(buff, 0, buff.Length);
//写入二进制流
然后运行B页面,此时问题来了,它一直显示一个图片加载失败的图标,但是我如果只运行A界面(就是直接把图片导入到此页面的方法,它会弹出一个“您是要加载还是下载”的对话框),所下载下来的图用本地图片浏览器浏览没有一点问题,图片也是我要的图片。
经过一番查找和研究后,发现是我指定图片的格式出错了,我在数据库中存储的图片格式是tif,而在页面上是不支持加载tif格式的图片的。所以我这种直接把tif的流传给页面是不允许的。
现在的解决方法是,新生成一个“.jpg”的图片,然后再进行之后的图片呈现操作,这样显示图片就没问题了。但是我心中还是有不解:难道tif的图片在网页上呈现方式只有这一种?非要把图片的格式转化后才能使用吗?如果在有大量请求向服务器要求呈现图片的情况下,会不会对服务器有很大的负担?所以我写下这篇文章,也希望看到此文章,对这类问题感兴趣的csdner们和我一起探究。
ps.为什么浏览器 / 网页不支持tiff格式?这是因为tiff格式是针对品质要求比较高的图片对象,这就会保留很多冗余信息(但对于那些对图片像素啊,清晰度啊等等有要求的人,这些就不是冗余信息了),而网页加载追求的是速度,所以就不支持这种格式了。(这是查的资料,如有说错,希望大家指正)