APP下载

基于ASP.NET的图片处理与检索技术的研究与实践

2017-04-15李进豪

电脑知识与技术 2016年34期
关键词:检索案例

摘要:ASP.NET具备开发网站应用程序的解决方案,让丰富多彩的网页更加容易开发。文章基于实际工作项目和需求,重点探索基于ASP.NET的图片处理与检索技术的可行性解决方案,并以实践案例辅以佐证。

关键词:ASP.NET;C#;图片处理;检索;案例

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)34-0100-04

Abstract: ASP.NET which can provide the solutions to developing web application program, makes the web pages more colorful and rich in contents and easier to be developed. Basing on the piratical work project and requirements, this paper mainly focused on the exploring the feasibility of implementations which image processing and retrieve technology based on the ASP. NET, and used practical case as supporting evidence.

Key words: ASP. NET; C#; image processing; retrieve; case

ASP.NET具备开发网站应用程序的解决方案,它分离程序代码与显示的内容,让丰富多彩的网页更加容易开发。文章主要根据笔者的实际工作项目和需求,重点探索基于ASP.NET对图片进行处理(添加文字标记)和快速检索所需图片的可行性实施方案和相关技术。

1 问题的提出

随着教学资源库建设的精细化,如何更加有效地发挥教学资源库的作用越来越引人关注,其中图片处理与检索是关注的焦点之一。在实际应用中,基于版权保护和其他附加说明的需要,我们在图片上传的同时需要对图片进行处理(添加文字标记等);基于快速检索的需要,我们在图片上传的同时需要构建一个图片信息数据库(关键词、作者等)。在笔者主持的全国农业职业教育“十三五”课题《基于AES的高水平教学团队构建的研究与实践》实施过程中,同样遇到上述的问题,需要我们在技术上进行解决。主要有:

1)把圖片上传到教学资源库时,需要让图片自动带有“省海洋信息技术科”的标记;

2)在图片上传过程中,需要自动获取图片的相关信息,用于构建图片信息数据库,为图片检索提供信息源;

3)基于关键词对图片进行检索时,需要按权限获取图片(原图或标记图)。

2 基于ASP.NET的图片处理技术

2.1 基本原理

2.1.1 命名规则(上传的图片)

基于图片检索的需要,图片上传时必须同时保存图片的关键词。为了方便用户和简化操作,在图片上传时,通常不额外要求用户输入关键词等,而是采用从图片文件名获取的方法。因此,基于简化的原则,图片的文件名必须带有检索所需的信息(这样的命名规则也有利于文件分类)。在笔者的实际工作项目中,图片检索时常有三个关键词:内容摘要(或标题)、作者、时间,因此图片的命名规则是:内容摘要+作者,时间由计算机自动产生。例:基于PDCA的课堂教学模式优化的研究与实践+李进豪.jpg。

2.1.2 基本原理

在ASP.NET中,图片处理的基本原理如图1所示。

2.2 图片处理的关键技术

2.2.1 添加文字标记的常用技术(开发语言:C#,下文同)

1)FromImage方法:从指定的 Image 创建新的 Graphics。

2)DrawImage方法:在指定位置并且按指定形状和大小绘制指定的Image。

3)DrawString方法:在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串。

2.2.2 添加文字标记的通用性示例代码

System.Drawing.Image myImage = System.Drawing.Image.FromStream(myStream, false);

System.Drawing.Graphics myg = System.Drawing.Graphics.FromImage(myImage);

myg.DrawImage(myImage,0,0,myImage.Size.Width,myImage.Size.Height);

System.Drawing.Font myf = new Font("隶书",12);

System.Drawing.Brush myb = new SolidBrush(System.Drawing.Color.Red);

myg.DrawString("省海洋信息技术科",myf,myb,5,5);

2.3 保存

2.3.1 图片保存的命名规则

1)原图:年+月+日+时+分+秒+毫秒,该文件名必要时进行加密,加密后访问时需要经过解密算法运算后才能获得真正的文件名。例:20161113183454420.jpg(未加密的文件名),BCCKEHGLISMQQSRSP.jpg(加密后的文件名)。

2)标记图:年+月+日+时+分+秒+毫秒+w,例:20161113183454420w.jpg。

3)自动获取“年+月+日+时+分+秒+毫秒”的通用性示例代码:

string filen=System.DateTime.Now.Year.ToString()+System.DateTime.Now.Month.ToString();

filen = filen +System.DateTime.Now.Day.ToString()+ System.DateTime.Now.Hour.ToString();

filen=filen+System.DateTime.Now.Minute.ToString()+System.DateTime.Now.Second.ToString()

filen=filen++System.DateTime.Now.Millisecond.ToString();

string filenameok=filen+"."+tmpfilen.Substring(tmpfilen.LastIndexOf(".") + 1);

// tmpfilen为上传文件的原文件名

2.3.2 图片预览

在图片上传完毕后,可利用Image控件进行预览。一般情况下,预览时选择标记图(标记图的字节数比原图小)。通用性示例代码如下:

this.mywebImage.ImageUrl = @"uploadfile\" + picName.Replace(suffix, "w" + suffix);

// picName 为文件名,suffix为扩展名

2.3.3 保存图片(原图和标记图)

1)SaveAs方法:将上载文件的内容保存到 Web 服务器上的指定路径。

2)通用性示例代码:myPost.SaveAs(fileSavePath)。

2.3.4 图片信息数据表

一般情况下至少需要有一张表用于保存三个信息:内容摘要、作者、时间等,如图2所示。

2.3.5 保存图片信息

基于ASP.NET进行开发,数据库通常选用SQL Server。基于上述的开发理念,保存图片信息的通用性示例代码如下:

string sqlcon1 = "Data Source=192.168.2.101;Initial Catalog=aes;Persist Security “;

sqlcon1 = sqlcon1 +” Info=True;User ID=sa;Password=12345678";

SqlConnection con1 = new SqlConnection(sqlcon1);

con1.Open();

string sql1 = "insert into mypicture(mytm,myxm,mydate,mypic) values('" + mytm1 + "','";

sql1 = sql1 + myxm1 + "','" + mydate1 + "','" + mypic1 + "')";

SqlCommand mycomm1 = new SqlCommand(sql1, con1);

mycomm1.CommandText = sql1;

mycomm1.ExecuteNonQuery();

con1.Close();

3 基于ASP.NET的图片检索技术

3.1 基本原理

在ASP.NET中,图片检索的原理相对简单,一般使用sql语句即可完成检索,难点在于如何编写条件语句,使检索更加高效,其基本原理如图3所示。

3.2 检索关键词

常用关键词:内容摘要、作者、时间(含开始日期、截止日期)。

3.3 图片检索通用性示例代码

string sqlcon = "Data Source=192.168.2.101;Initial Catalog=aes;Persist Security Info”;

sqlcon =+”True;User ID=sa;Password=12345678";

SqlConnection con = new SqlConnection(sqlcon);

con.Open();

string sql = "select * from mypicture where mytm like '%"+mytm1+"%' and myxm like '%";

sql = sql +myxm1+"%' and mydate>='" + mywebdate1 + "' and mydate<='" + mywebdate2;

sql = sql + " order by mydate desc";

System.Data.SqlClient.SqlDataAdapter my1 = new SqlDataAdapter(sql, con);

System.Data.DataSet my2 = new DataSet();

my2.Clear();

my1.Fill(my2, "mypicture");

int myzs = my2.Tables["mypicture"].Rows.Count;

4 案例

4.1 需求

項目来源:1、广东省中等职业学校“百千万人才培养工程”专业名师培养对象专项资金(2015—2017);2、全国农业职教育“十三五”科研课题《基于AES的高水平教学团队构建的研究与实践》,课题编号:2016-135-Y-227。

需求:为了实现经验积累与分享(AES,Accumulated Experience Sharing的缩写),课题组需要将大量的图片上传到服务器,用户(教师和学生)根据需求检索并下载。基于版本保护的需要,上传的图片分为原图和标记图(在原图的基础上添加标记)。

4.2 基本原理

基于ASP.NET技术,本项目图片处理与检索的基本原理如图4所示。

4.3实现

4.3.1 上传图片的格式

1)格式:内容摘要(或标题)+作者。

2)示例(如图5所示)

4.3.2给图片添加标记

1)添加标记信息:省海洋信息技术科

2)代码:采用通用性示例代码。

3)示例(如图6所示)

4.3.3 图片的保存

1)代码:采用通用性示例代码。

2)示例(如图7所示)

4.3.4 检索

1)模糊检索的基本原理:内容摘要(空白表示不约束,使用“包含”进行检索),作者(空白表示不约束,使用“包含”进行检索),开始日期和截止日期(未选择表示不约束)。

2)内容摘要和作者模糊检索的条件语句

string mytm1= this.TextBox1.Text.Trim();

string myxm1= this.TextBox2.Text.Trim();

条件语句:mytm like '%"+mytm1+"%' and myxm like '%"+myxm1+"%'";

3)日期模糊检索的条件语句

string mywebdate1=this.Calendar2.SelectedDate.Date.ToShortDateString();

string mywebdate2 = this.Calendar3.SelectedDate.Date.ToShortDateString();

if (mywebdate2 == "0001/1/1")

mywebdate2 = "3000/1/1";

//未选择时,日历控件的返回值是"0001/1/1"。

条件语句:"mydate>='" + mywebdate1 + "' and mydate<='" + mywebdate2 + "'";

4)示例(如图8所示)

4.3.5 预览

1)图片预览的顺序:按上传时间排序(降序,实现代码:order by mydate desc)

2)示例代码(每页显示三张图片)

if (mycs<=myzs)

this.Image1.ImageUrl=@"uploadfile\"+ my2.Tables["mypicture"].Rows[mycs-1]["mypic"].ToString().Trim();

mycs += 1;

if (mycs <= myzs)

this.Image2.ImageUrl=@"uploadfile\"+ my2.Tables["mypicture"].Rows[mycs-1]["mypic"].ToString().Trim();

mycs += 1;

if (mycs <= myzs)

this.Image3.ImageUrl=@"uploadfile\"+my2.Tables["mypicture"].Rows[mycs-1]["mypic"].ToString().Trim();

this.Label1.Text = ((int)mycs/3).ToString(); //用于保存预览图片的页数

3)预览图(如图9所示)

4.3.6 图片翻页

1)上一頁示例代码

int mycs = (System.Convert.ToInt16(this.Label1.Text)-2)*3;

mycs += 1;

if (mycs <= 0)

mycs = 1;

//预览代码(略)

2)下一页示例代码

int mycs = System.Convert.ToInt16(this.Label1.Text)*3;

if (mycs == myzs)

{ mycs = mycs - 2; }

else

{ mycs += 1;

if (mycs > myzs)

mycs = ((int)myzs / 3) * 3 + 1;}

//预览代码(略)

4.3.7 原图与标记图

1)经过文中代码处理后的标记图,正常情况可作为原图的微缩图(1M的原图,标记图一般为130K左右),在本项目中常用于预览。

2)示例(如图10所示)

4.3.8 下载

根据权限下载,管理者用户可下载原图和标记图,普通用户只可以下载标记图。实现方法较为简单,主要通过点击标记图浏览原图或标记图下载。

4.3.9 加解密算法

在下载时,防止超越权限下载原图,本项目主要是通过文件名的加解密算法来实现(为了阐述方便,上文的文件名并未实现加解密)。最简单的加解密算法是:

1)基本原理

加密:文件名的每一个字符的ASCII码 + 常数 + 第几位 - 文件名长度

加密示例:(int)fileoldarray[i]+35+i-filelen

解密:文件名的每一个字符的ASCII码 - 常数 - 第几位 + 文件名长度

解密示例:(int)fileoldarray[i]-35-i+filelen

2)加密示例代码

filelen=fileold.Length;

char[] fileoldarray=fileold.ToCharArray();

filenew = "";

for (int i=0;i

{ if (i%2==1)

filenew += (char)((int)fileoldarray[i]+35+i-filelen);

else

filenew += (char)((int)fileoldarray[i]+33+i-filelen); }

3)解密示例代码

filelen=fileold.Length;

char[] fileoldarray=fileold.ToCharArray();

filenew = "";

for (int i=0;i

{ if (i%2==1)

filenew += (char)((int)fileoldarray[i]-35-i+filelen);

else

filenew += (char)((int)fileoldarray[i]-33-i+filelen); }

4)实例

原文件名:2016111323933973.jpg

加密后文件名:CDDLFIHMKOTQPYVU.jpg

5 结束语

ASP.NET提供了强大的、标准化的web服务支持能力,笔者常用于开发基于web的各种管理系统,也常用于开发基于XML的数据交换程序。文中提及的代码(C#)全部在真实环境中测试通过,并应用于实际工作中。

參考文献:

[1] 李进豪. 课堂教学有效性的研究与实践[Z]. 第六届全国农业职业教育教学成果二等奖, 2015.

[2] 李进豪. 基于AES的教师教学能力提升的研究与实践[Z]. 2015年广东省职协优秀科研成果一等奖, 2016.

猜你喜欢

检索案例
案例4 奔跑吧,少年!
2019年第4-6期便捷检索目录
随机变量分布及统计案例拔高卷
发生在你我身边的那些治超案例
专利检索中“语义”的表现
一个模拟案例引发的多重思考
国际标准检索
国际标准检索