本文讨论基于B/S结构,在服务器端用ASP.NET和C#实现对数据库中的图像生成缩略图、全尺寸图及水印等方法,并给出了具体实例。
关键词 图片,缩略图,水印
一、 引言
现代图书馆中采用B/S结构的软件越来越广泛,读者的个人信息和相关资料已基本存储到大型数据库中,但读者的照片处理一般是将照片上传至Web服务器中一个指定的文件夹,然后将照片的路径存放在数据库中,这些非结构化数据是存储在文件系统中的,当照片文件越来越多,维护也越发困难,这对数据库的管理带来了很大的不便,非结构化的图片未经处理直接在网络中传输增加了网络的负荷,也降低了程序运行的速度,为此笔者查阅了相关资料,成功的用C# + ASP.NET + SQL Server较好的解决了以上问题。
二、 基本思路
为解决非结构化数据对系统的不利影响,设计了下面的优化方案。首先在SQL Server数据库中利用IMG字段存储图片,将一个比较清晰的照片存入数据库,当要显示照片时,通过客户端浏览器向Web服务器发出要显示照片的请求,让Web服务器按我们的要求生成一个指定大小含有水印信息的读者照片缩略图,然后将这个照片传递到客户机的浏览器上,当需要查看读者的大照片时,通过点击缩略图上的超链接后让Web服务器生成加注了读者个人信息水印的全尺寸照片传递给客户端浏览器供用户使用。
三、 技术支持
随着数据库技术的发展,图像、音频等数据也可以存储到数据库中,这为照片等其他多媒体数据的结构化存储奠定了基础。
在VS.NET中,GDI+提供的二维图形、图像处理等功能,可以在窗体上绘制各种图形图像。GDI+在开发人员与上述设备之间起的作用如图1所示:
图1 GDI+的桥梁作用
从上面所示结构中可以看出,GDI+的本质在于,它能够替代开发人员实现与其他外部设备的交互;GDI+在应用程序和外部设备之间起着桥梁作用,GDI+还为开发者提供了一组实现与各种设备(如监视器,打印机及其他具有图形化能力但不涉及这些图形细节的设备)进行交互的库函数;而从开发人员的角度来看,要实现与这些设备的直接交互却是一项艰巨的任务,要利用GDI+绘制任何形状时,首先用Graphics类创建图像,Graphics 类是 GDI+ 的核心,Graphics 对象不仅仅是提供绘图方法,它还可以还维护图形状态,使用时先根据需要设置其属性,利用DrawImage方法在图像类所表示的绘图表面上按指定的大小绘制图像,然后再利用DrawString方法在图像类所表示的绘图表面上描绘水印信息。