网络相册的设计与部分实现信息科学与技术学院吴涛1、基本需求分析•由可以在电脑上观赏的区别于CD/VCD的静止图片组成的特殊文档,其内容不局限于摄影照片,也可以包括各种艺术创作图片。电子相册具有传统相册无法比拟的优越性:图、文、声、像并茂的表现手法,随意修改编辑的功能,快速的检索方式,永不褪色的恒久保存特性,以及廉价复制分发的优越手段。•网络相册是网站为用户提供的个人相片展示、存放的平台;一般的网络相册可以选择“公开”或者“私人”的属性,如果您的相册是设为公开属性,其他用户可以查看、分享。•在网络相册网站中,用户可以上传图片,建立分类相册,设定相册隐私权限,也可以观看、评论其他人的相册与照片。•有些相册也支持照片外链,方便用户在其他网站、社区、讨论区分享他们的照片。•国外的网络相册主要有PICASA、Flickr、Photobucket。•国内的网络相册主要有POCO网络相册、16相册、网易相册、百度相册、有照片等。•请有兴趣者课后注册并查阅相关产品。2、总体设计•首页•照片缩略图查看、照片详细图浏览•照片管理(添加、删除、修改等)•照片分类、分享、评论•照片特效(放大、缩小、边框、滤镜、场景渲染等)•用户管理(注册、修改、删除、更新等)•照片高级功能(以图搜图、自动抠图等)3、数据库设计•(1)、用户表•用户ID•用户昵称•用户密码•可以用用户ID登陆页可以用昵称登陆•ID是英文IDentity的缩写,标识号的意思。也称为序列号或帐号,是某个体系中相对唯一的编码,相当于是一种“身份证”。•在某一具体的事物中,ID号一般是不变的,至于用什么来标识该事物,则由设计者自己制定的规则来确定。•一般而言,这个规则根据具体的使用环境在设计上有一定的主观性。•如:“员工工号”、“身份证号码”“计算机网址”等。•(解释来源:百度百科)•(2)、照片表(图像表)•图像ID•图像拍摄信息(相机、时间等从图像自动读取)•图像类别ID•图像作者(如果不填写,就默认根据类别ID获取用户ID作为作者)•图像内容•图像注释说明•图像缩略图•(3)、图像类别表•图像类别ID•用户ID•图像类别信息•是否公开(加锁)4、大图浏览功能的实现•打开对应图像,显示图像,以及相关的详细信息,如图像作者、拍摄时间、采用相机等。•在该功能模块的基础上扩展(课后)(a)照片分类、分享、评论(b)照片特效(放大、缩小、边框、滤镜、场景渲染等)•//(1)连接数据库•SqlConnectioncon=newSqlConnection();•con.ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings[ImgConnectionString].ToString();•con.Open();•//(2)实例化命令对象•intimgid=int.Parse(Request.QueryString[imgid]);•stringSqlString=select*fromImgTablewhereImgID=+imgid;•SqlCommandcom=newSqlCommand(SqlString,con);•//(3)读取二进制流对象并输出•SqlDataReadersdr=com.ExecuteReader();•if(sdr.Read())•{Response.BinaryWrite((byte[])sdr[ImgBinary]);•}•Response.End();//response.flush()•Command对象,也称为数据库命令对象,主要执行包括添加、删除、修改及查询数据的操作的命令,也可以用来执行存储过程。•一个CommandType属性:用于执行存储过程时为CommandType.StoredProcedure,默认情况下为CommandType.Text,表示执行的是普通SQL语句。•Command主要有三个方法:•ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。ExecuteReader():执行一个查询的SQL语句,返回一个DataReader对象。ExecuteScalar():从数据库检索单个值,这个方法主要用于统计操作。•//(4)关闭相关对象•sdr.Close();•con.Close();•//(5)出错处理•try•{……………….}•catch•{•Response.Write(scriptalert('数据库无法连接!')/script);•}5、显示全部图像缩略图•打开对应用户账户,显示某个类别相册的所有图像;•对每个图像建立超级链接,点击能够进入显示图像的详细信息以及相关图像操作。•在该功能模块的基础上扩展(课后)•照片高级功能(以图搜图、自动抠图等)•//(1)连接数据库•SqlConnectioncon=newSqlConnection();•con.ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings[ImgConnectionString].ToString();•con.Open();•//(2)实例化命令对象•stringSqlString=select*fromImgTable;•//考虑到文件大小,通常不要用*•SqlCommandcom=newSqlCommand(SqlString,con);•//(3)读取二进制流对象•SqlDataReadersdr=com.ExecuteReader();•//(4)输出图像对象•while(sdr.Read())•{•Response.Write(“ahref=‘ShowImg.aspx?imgid=”+sdr[“ImgID”].ToString()+“’imgsrc=‘ShowImg.aspx?imgid=”+sdr[“ImgID”].ToString()+“’alt=‘点击看大图’height=‘150’width=‘150’/a”);•}•//(5)图像列表显示的控制•Response.Write(tableborder=0align='center');•inti=1;//记录计数器intn=5;表格列控制•while(sdr.Read())•{•if(i%n==1)•{Response.Write(“tr”);}•Response.Write(“td”);Response.Write(“/td”);•if(i%n==0)•{Response.Write(“/tr”);}•i=i+1;•}•Response.Write(“table”);•//(6)关闭相关对象•sdr.Close();•con.Close();•//(7)出错处理•try•{……………….}•catch•{•Response.Write(scriptalert('数据库无法连接!')/script);•}6、添加图像的实现