首页 / 软件开发 / C# / C#生成缩略图控件
C#生成缩略图控件2011-07-31 博客园 程序执着追随者实现原理:1、我们现在要做的是自定义Web控件,这和平常设计aspx网页或者用户控件有本质区别,自定义控件 是一个派生自System.Web.WebControls.WebControl的类,它是一个类,而不是你想象中的HTML代码,甚 至在自定义控件中你完全找不到HTMl的任何风格。因此,你必须对类的编写设计非常数量,或者是,跳出 设计HTML的圈子,拓展思维!2、我们要实现不依靠文件系统、不依靠额外的任何其他东西,仅仅依靠一个类来实现它,这样做好处 自然明显——各位只要复制得下面的一堆代码,自己建一个cs文件放进去就可以编译(编译为dll)。所 有功能都是自含的,除了位于公共位置的.net类库,其他任何dll我都不需要引用。然而,要实现如第2条这样的效果,我们得把对缩略图的请求设计成为对包含控件网页本身的请求,因 为针对缩略图的这一次请求,本质仍然对本网页的请求,这样,网页中包含的缩略图控件才有机会操纵流 。当然,两次请求都针对同一张网页的话,我们要设法区分开,哪一次是真正请求网页的原内容,哪一次 是针对请求一个缩略图。不知上述这段话大家能否理解,如果不这样做的话,我们就不得不需要额外的控件或网页来实行了。看懂了上述原理,我现在把流程写在下面,就自然好理解了:1、客户请求一张网页,如index.aspx,网页中含有缩略图控件,2、Index.aspx编译执行为HTML后被发送到客户端浏览器。这个控件生成了一个img标记,src属性指向 一张该网页本身,但是后面附带的参数改变了。浏览器解析了,知道要向src属性获得一张图片。它开始 向这个位置请求(也就是重新以新的附带参数请求这个网页)。3、ASP.Net获得了这个请求,index.aspx这个页面又开始执行,因为index.aspx中包含这个缩略图控 件,控件就有机会识别这段特殊的参数,并且重新改写响应流,它会在文件系统中获得原始图像,然后根 据你的要求,使用GDI.NET将原图重新按照新尺寸绘制,得到的新图是一个流对象,我们不存储它,而是 将它直接附着在响应流中,发送给客户端。4、客户端浏览器得到这张图片。网页加载完成。好,原理是说了不少,虽然我尽量写得通俗,但难免大家一时半会儿可能不好理解。那我现在就把代 码贴出来让大家参考。这个缩略图控件还没有添加水印等类似版权保护的功能,各位有兴趣的高手不妨完善一下这部分内容 。同时与各位朋友相互学习,加强思考,增进思维。我们不管ASP.NET孰优孰劣,对于个人来说,既然追 随ASP.NET,就要把ASP.NET用好,随波逐流的程序员永远不会优秀。