用ASPNET在网页上显示缩略图
.NET处理了网页以后就把该网页的内容发送回浏览器。a.aspx的内容一般是含有超文本标记的文本文件流这是谁都不会怀疑的。但是a.aspx不但能够返回这种非常平常的网页文本外把它广义开来它其实可以放回任何类型的流数据。而我们只需要对Response对象进行操作即可改变输出流的内容。
把图像文件看作是一个二进制流我们试图从一个图像文件创建了他的流对象并且将流写入到Response.OutputStream中这样图像文件就被发给了请求的浏览器。但是浏览器还必须要识别出这是一个图像文件因此在发送这个流之前将tentType更改成这种图像文件的MIME类型。浏览器在收到这个流之后调用相关的应用程序图像就被显示在了浏览器上asp教程。虽然实际地址还是aspx结尾。
这样我们就能很好理解怎么去向用户发送标记。例如在一张普通的网页中写标记img标记使他的src指向a.aspx。浏览器在得到这张网页后会处理img标记的内容并向a.aspx发出请求这是a.aspx作为图像流返回浏览器就将图片显示出来。
有了上述技术基础我们可以建立这样一个空的aspx网页他通过接受传入的参数生成缩略图的流发送回浏览器。
这一句Page指令仅仅是告诉服务器这个文件的隐藏类是_51use.GetThumbnail而如果我们都不作任何操作的线c;这个文件最终输出时空的。
我们在Page_Load事件处理函数中先获取要生成缩略图的原始文件的路径和缩略图的宽度高度。
然后设置了一个子函数GetNewSize用以计算真正缩略图的大小为什么还要计算阿因为缩略图的宽高比和原始图片的宽高比不一样缩小的图片要保证比例按照比例缩小的原始图片是按照约束在指定缩略图宽高范围内的原则填充不满的地方使用背景色填补空白。另外原图比缩略图小的线c;我们就不做放大而是按原图输出所以计算是必须的。
我们从原始图像创建了他的Image对象并获得它的格式等信息稍后用得到。
接下来新建一个BitMap对象并由新的BitMap对象创建画板。设置画笔质量为高交错模式为高质量立方式这些的目的是使用最好的质量描绘缩略图否则图片缩小后信息丢失图片失真就不好看了。接着用指定的宽度和高度将原始图像的Image对象“画”在新的画板上。
这样在浏览器看来对该网页的请求相当于对一个图片文件的请求只不过图片是实时生成的只需传递参数合法有效即可得到该图片的缩略图。
本文中所述的缩略图生成法使用的是流的概念和文件系统也不沾边因此这种方式可以跳过对文件系统权限检查百分之百正确运行。当然也可以借助文件系统。另外根据上面流输出的概念举一反三可以弄出很多用法例如NeoDynamic的条形码控件你会发现条形码图片的路径居然就是本页页面他巧妙地将对本页的请求通过对几个特征参数的判定而转向生成图片流从而达到了不添加任何页面不借助文件系统的“神奇效果”只需要一个DLL即可使用。
另外很多人问生成验证码图片也可以使用这样的思路自己做一个这样的控件或者网页。如果能做自定义控件更好。相信大家有这个能力。
最后还是提倡大家都去翻翻MSDN有很大帮助。安装VS的时7CD装的版本其中三张是MSDN Library包含了近乎所有你想要了解的东西。如果有时间不妨多访问一下MSDN中国不定期会有一些优秀的文章在上面。怎么修改asp源码页面内容的大小和宽度