最近碰到这样一个需求:把图片保存到数据库中,然后作为上传人的头像之类的。本着程序员的优良“惰性”Google了一把,找到了一大把一大把代码,试了很多号称能得到清晰缩略图的,结果就不用说了。最终在一开源项目中找到了解决办法,为了让后来人免受我所受过的煎熬,所以放出代码!
写一个上传页面:
<%...@Pagelanguage="c#"Codebehind="UploadPictureConvertTo.aspx.cs"AutoEventWireup="false"Inherits="PicturesToDB.UI.UploadPictureConvertTo"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>UploadPicture</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<metaname="vs_defaultClientScript"content="JavaScript">
<metaname="vs_targetSchema"content="http://schemas.microsoft.com/intellisense/ie5">
<scriptlanguage="javascript">...
functionShowImage(value,img)
...{
//alert(value);该脚本来源于网络
//检测盘符
//alert(value.indexOf(':'));
//检测文件是否有扩展名
//alert(value.length-value.lastIndexOf('.'));
//取文件扩展名
//alert(value.substr(value.length-3,3));
//检测文件扩展名是否合法
//alert(CheckExt(value.substr(value.length-3,3)));
if(value.length>5&&value.indexOf(':')==1&&(value.length-value.lastIndexOf('.'))==4&&CheckExt(value.substr(value.length-3,3)))
...{
img.src=value;
img.alt="本地图片预览";
img.style.visibility="visible";
}
else
...{
img.style.visibility="hidden";
}
}
//检查扩展名是否合法,合法返回True
functionCheckExt(ext)
...{
//这里设置允许的扩展名
varAllowExt="jpg|gif|jpeg|png|bmp";
varExtOK=false;
varArrayExt;
if(AllowExt.indexOf('|')!=-1)
...{
ArrayExt=AllowExt.split('|');
for(i=0;i<ArrayExt.length;i++)
...{
if(ext.toLowerCase()==ArrayExt[i])
...{
ExtOK=true;
break;
}
}
}
else
...{
ArrayExt=AllowExt;
if(ext.toLowerCase()==ArrayExt)
...{
ExtOK=true;
}
}
returnExtOK;
}
</script>
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server"enctype="multipart/form-data">
<table>
<tr>
<tdcolspan="2"><imgid="img"STYLE="VISIBILITY:hidden"></td>
</tr>
<tr>
<td>请选择上传图片</td>
<td><inputid="PictureFile"name="PictureFile"type="file"onchange="javascript:ShowImage(this.value,document.getElementById('img'))"
runat="server"></td>
</tr>
<tr>
<td>描述</td>
<td>
<asp:TextBoxid="TextBox1"runat="server"></asp:TextBox></td>
</tr>
<tr>
<tdcolspan="2"align="center">
<asp:Buttonid="Button1"runat="server"Text="提交"></asp:Button></td>
</tr>
</table>
</form>
</body>
</HTML>
上传按钮的Click事件,以及生成缩略图的方法
privatevoidButton1_Click(objectsender,System.EventArgse)
...{
//没有做文件类型检测,自己加上可以参考清清月儿的Blog
//http://blog.csdn.net/21aspnet/archive/2007/04/01/1548696.aspx
HttpPostedFilepicture=PictureFile.PostedFile;
PictureLength=picture.ContentLength;
try
...{
if(PictureLength==0)
...{
Response.Write("<scriptlanguage=javascript>alert('请选择上传文件');</script>");
}
else
...{
StreamPictureStram=picture.InputStream;
MemoryStreamReduceStream=newMemoryStream();
ReduceStream=ResizeImageFile(PictureStram);
Byte[]PictureByte=ReduceStream.ToArray();
stringstrConn=@"DataSource=localhost;InitialCatalog=CommonCompontTest;UserID=sa;Pwd=sa";
SqlConnectionsqlConn=newSqlConnection(strConn);
stringsqlCommand=@"INSERTINTO[PicturnsTable]([PictureBinary],[PictureType],[PictureDes],[PiacureSize])
VALUES(@PictureBinary,@PictureDes,@PiacureSize)";
SqlCommandsqlCMD=newSqlCommand(sqlCommand,sqlConn);
sqlCMD.Parameters.Add("@PictureBinary",SqlDbType.Binary).Value=PictureByte;
sqlCMD.Parameters.Add("@PictureDes",SqlDbType.VarChar,200).Value=TextBox1.Text.Trim();
sqlCMD.Parameters.Add("@PiacureSize",SqlDbType.Int).Value=PictureByte.Length;
sqlConn.Open();
sqlCMD.ExecuteNonQuery();
sqlConn.Close();
Response.Write(@"<scriptlanguage=javascript>alert('文件上传功');window.location.href='UploadPictureConvertTo.aspx';</script>");
//Response.Redirect("UploadPicture.aspx");
}
}
catch(Exceptionex)
...{
Console.Write(ex.Message);
}
}
//生成缩略图的代码
privatestaticMemoryStreamResizeImageFile(Streamstream)
...{
SizenewSize=newSize(320,240);
using(System.Drawing.ImageoldImage=System.Drawing.Image.FromStream(stream))
...{
using(BitmapnewImage=newBitmap(newSize.Width,newSize.Height,PixelFormat.Format24bppRgb))
...{
using(Graphicscanvas=Graphics.FromImage(newImage))
...{
canvas.SmoothingMode=SmoothingMode.AntiAlias;
canvas.InterpolationMode=InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode=PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage,newRectangle(newPoint(0,0),newSize));
MemoryStreamm=newMemoryStream();
newImage.Save(m,ImageFormat.Jpeg);
returnm;
}
}
}
}
数据库表结构很简单,这里就不说了
然后就是获取图片的页面,写得很简单,将就着看哈
privatevoidPage_Load(objectsender,System.EventArgse)
...{
//在此处放置用户代码以初始化页面
intPictureID=Convert.ToInt32(Request.Params["PictureID"]);//ImgID为图片ID
//建立数据库链接
stringstrConn=@"DataSource=localhost;InitialCatalog=CommonCompontTest;UserID=sa;Pwd=sa";
SqlConnectionsqlConn=newSqlConnection(strConn);
StringSqlCmd="SELECT[PictureID],[PictureBinary],PictureDes],[PiacureSize]FROM.[PicturnsTable]wherePictureID=@PictureID";
SqlCommandSQLCmd=newSqlCommand(SqlCmd,sqlConn);
SQLCmd.Parameters.Add("@PictureID",SqlDbType.Int).Value=PictureID;
sqlConn.Open();
SqlDataReaderSqlReader=SQLCmd.ExecuteReader();
SqlReader.Read();
//输出图象文件二进制数制
Response.OutputStream.Write((byte[])SqlReader["PictureBinary"],0,(int)SqlReader["PiacureSize"]);
Response.End();
sqlConn.Close();
//很简单吧^_^
}
查看图片的页面就用个Gridview就可以了,更简单的就是,这样写在VS IDE中直接就可以看到了,麻烦就是每次都要改^_^
<%@Pagelanguage="c#"Codebehind="ShowPicture.aspx.cs"AutoEventWireup="false"Inherits="PicturesToDB.UI.ShowPicture"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>ShowPicture</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<metaname="vs_defaultClientScript"content="JavaScript">
<metaname="vs_targetSchema"content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<imgsrc="GetThePicture.aspx?PictureID=29">
</form>
</body>
</HTML>
代码就这样,希望能被需要的人Google到 呵呵
分享到:
相关推荐
### ASP.NET 生成高质量缩略图函数解析 #### 概述 在Web开发中,处理图像数据是一项常见的任务。为了优化用户体验并加快页面加载速度,通常需要将原始图像转换为较小尺寸的缩略图。ASP.NET 提供了丰富的功能来处理...
### ASP.NET 自动生成缩略图知识点解析 #### 一、概述 在Web开发中,图片处理是一项常见的需求。尤其是在用户上传图片后,为了更好地展示或节省带宽资源,往往需要将图片转换为较小尺寸的版本(即缩略图)。ASP...
.NET 缩略图控件(GDI+)是.NET Framework中用于显示图像预览或缩略图的一个组件,它基于Windows图形设备接口的增强版本——GDI+。GDI+提供了一套强大的图形处理功能,使得程序员能够轻松地在应用程序中实现图像的...
在ASP.NET中生成缩略图是一项常见的任务,尤其在网站开发中,用于显示大图预览或者节省服务器资源。这个过程涉及到图像处理技术,包括尺寸调整、比例保持、格式转换等。下面将详细讲解如何在ASP.NET环境中实现这一...
### ASP.NET 生成缩略图源码解析 #### 一、概述 在Web开发中,图像处理是一项常见的需求,特别是对于需要展示大量图片的应用场景,如电商网站、社交媒体平台等。其中,生成缩略图是优化用户体验的重要手段之一。...
在IT行业中,获取视频缩略图是一项常见的任务,特别是在视频分享、播放器开发或网站设计等领域。本教程将深入探讨如何仅通过视频地址来获取视频的缩略图,这是一个高效且实用的技术。以下是对这个主题的详细阐述: ...
首先,定义一个新尺寸的矩形,然后调用源图片的Clone方法,传入新的尺寸和图像格式,即可得到缩略图。 - `Graphics`类的`DrawImage`方法也可用于创建缩略图,通过指定目标尺寸,它可以按比例缩放图像。 3. **调整...
这些库可以模拟浏览器环境,处理JavaScript和CSS,从而获得更准确的缩略图。 ```csharp // 示例代码使用CEFSharp using CefSharp; ChromiumWebBrowser browser = new ChromiumWebBrowser(url); browser....
在ASP.NET开发中,添加水印文字和生成缩略图是一项常见的需求,特别是在网站的图片处理功能中。本文将深入探讨如何使用ASP.NET实现这一功能,包括水印技术和图像缩略图的创建。 首先,我们需要了解什么是水印。水印...
2. 图片切割:图片切割是将一张图片分割成多个部分,通常用于创建缩略图、提取特定区域或分块传输大图。在C#中,可以使用Bitmap类的Clone方法来切割图片。首先,定义一个矩形区域,该区域表示要切割的部分,然后调用...
根据视频地址,获取视频缩图 .net 视频 地址 56 ku6 tudou youku 酷6 土豆 优酷 缩略 图 封面 分享
缩略图是一种小型的图像预览,它能够快速地展示一个文件或文件夹的主要内容,尤其对于图片文件,缩略图可以让用户在不打开文件的情况下快速浏览。在Windows系统中,文件管理器如资源管理器默认支持缩略图显示。 在...
这个话题主要围绕C#语言如何利用系统资源和特定库来获取不同类型的文件,如图片、文档、视频等的缩略图,并且能够根据需要调整缩略图的像素大小以达到清晰的显示效果。以下是一些关键知识点的详细说明: 1. **...
.NET C#中生成缩略图的过程可以细分为以下步骤: 1. 图片文件的读取:首先需要通过Image.FromFile()方法读取原始图片文件,得到一个Image对象,这一步是进行图片处理前的必要准备。 2. 缩略图尺寸的确定:根据传入...
使用System.Drawing命名空间中的Graphics和Image类,根据原始图片的宽高比例计算缩略图大小,避免失真。可以先加载原图,创建一个新图像,设置其大小,然后将原图绘制到新图像上。 8. **添加水印**: 水印可以是...
3. **自定义缩略图生成**:为了获得更好的控制,我们可以手动创建缩略图。这通常涉及以下步骤: - 计算缩放比例:根据目标缩略图的宽度和高度,计算出与原始图像的比例。 - 创建Bitmap对象:基于缩放比例和目标...
3. **预览功能**:在用户选择图片后,Flash可以读取文件内容并生成缩略图,实现在上传前的预览。这有助于用户确认他们选择的图片是否正确,同时也可以提供基本的质量检查。 4. **文件上传**:当用户确认图片后,...
ASP 微信分享、朋友圈自定义缩略图内容。 亲测可以使用。内含实例。
图书管理模块允许后台管理员添加图书,特别地,添加图书时系统能自动创建缩略图并添加文字水印,这展示了Asp.net2.0的图像处理能力。订单管理模块确保了购物车和结算流程的顺畅,而会员管理则涉及用户注册、登录、...
最后,`GetThumbnailImage`方法用于生成缩略图,根据设定的`m_ThumbnailWidth`和`m_ThumbnailHeight`调整位图的大小,得到最终的缩略图。 整个过程涉及了.NET Framework的多线程编程、Windows Forms控件的使用、...