`
hejianhuacn
  • 浏览: 70082 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

.Net 下获得清晰的缩略图

 
阅读更多

最近碰到这样一个需求:把图片保存到数据库中,然后作为上传人的头像之类的。本着程序员的优良“惰性”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生成高质量缩略图函数.txt

    ### ASP.NET 生成高质量缩略图函数解析 #### 概述 在Web开发中,处理图像数据是一项常见的任务。为了优化用户体验并加快页面加载速度,通常需要将原始图像转换为较小尺寸的缩略图。ASP.NET 提供了丰富的功能来处理...

    asp.net 自动生成缩略图

    ### ASP.NET 自动生成缩略图知识点解析 #### 一、概述 在Web开发中,图片处理是一项常见的需求。尤其是在用户上传图片后,为了更好地展示或节省带宽资源,往往需要将图片转换为较小尺寸的版本(即缩略图)。ASP...

    .net缩略图控件(gdi)

    .NET 缩略图控件(GDI+)是.NET Framework中用于显示图像预览或缩略图的一个组件,它基于Windows图形设备接口的增强版本——GDI+。GDI+提供了一套强大的图形处理功能,使得程序员能够轻松地在应用程序中实现图像的...

    asp.net 生成缩略图

    在ASP.NET中生成缩略图是一项常见的任务,尤其在网站开发中,用于显示大图预览或者节省服务器资源。这个过程涉及到图像处理技术,包括尺寸调整、比例保持、格式转换等。下面将详细讲解如何在ASP.NET环境中实现这一...

    asp.net 生成缩略图源码

    ### ASP.NET 生成缩略图源码解析 #### 一、概述 在Web开发中,图像处理是一项常见的需求,特别是对于需要展示大量图片的应用场景,如电商网站、社交媒体平台等。其中,生成缩略图是优化用户体验的重要手段之一。...

    通过视频地址获取视频缩略图

    在IT行业中,获取视频缩略图是一项常见的任务,特别是在视频分享、播放器开发或网站设计等领域。本教程将深入探讨如何仅通过视频地址来获取视频的缩略图,这是一个高效且实用的技术。以下是对这个主题的详细阐述: ...

    C#生成缩略图,C#缩略图,C#水印

    首先,定义一个新尺寸的矩形,然后调用源图片的Clone方法,传入新的尺寸和图像格式,即可得到缩略图。 - `Graphics`类的`DrawImage`方法也可用于创建缩略图,通过指定目标尺寸,它可以按比例缩放图像。 3. **调整...

    输入网址保存缩略图c#.net

    这些库可以模拟浏览器环境,处理JavaScript和CSS,从而获得更准确的缩略图。 ```csharp // 示例代码使用CEFSharp using CefSharp; ChromiumWebBrowser browser = new ChromiumWebBrowser(url); browser....

    ASP.NET加水印文字并生成缩略图源码

    在ASP.NET开发中,添加水印文字和生成缩略图是一项常见的需求,特别是在网站的图片处理功能中。本文将深入探讨如何使用ASP.NET实现这一功能,包括水印技术和图像缩略图的创建。 首先,我们需要了解什么是水印。水印...

    .net图片处理

    2. 图片切割:图片切割是将一张图片分割成多个部分,通常用于创建缩略图、提取特定区域或分块传输大图。在C#中,可以使用Bitmap类的Clone方法来切割图片。首先,定义一个矩形区域,该区域表示要切割的部分,然后调用...

    根据视频地址,获取视频缩图 .net

    根据视频地址,获取视频缩图 .net 视频 地址 56 ku6 tudou youku 酷6 土豆 优酷 缩略 图 封面 分享

    C# 加载文件夹实现缩略图显示

    缩略图是一种小型的图像预览,它能够快速地展示一个文件或文件夹的主要内容,尤其对于图片文件,缩略图可以让用户在不打开文件的情况下快速浏览。在Windows系统中,文件管理器如资源管理器默认支持缩略图显示。 在...

    C# 获得各种文件不同大小缩略图

    这个话题主要围绕C#语言如何利用系统资源和特定库来获取不同类型的文件,如图片、文档、视频等的缩略图,并且能够根据需要调整缩略图的像素大小以达到清晰的显示效果。以下是一些关键知识点的详细说明: 1. **...

    .net C#生成缩略图实现思路分解

    .NET C#中生成缩略图的过程可以细分为以下步骤: 1. 图片文件的读取:首先需要通过Image.FromFile()方法读取原始图片文件,得到一个Image对象,这一步是进行图片处理前的必要准备。 2. 缩略图尺寸的确定:根据传入...

    asp.net文件与图片处理

    使用System.Drawing命名空间中的Graphics和Image类,根据原始图片的宽高比例计算缩略图大小,避免失真。可以先加载原图,创建一个新图像,设置其大小,然后将原图绘制到新图像上。 8. **添加水印**: 水印可以是...

    用C#轻松实现缩略图(源文件)

    3. **自定义缩略图生成**:为了获得更好的控制,我们可以手动创建缩略图。这通常涉及以下步骤: - 计算缩放比例:根据目标缩略图的宽度和高度,计算出与原始图像的比例。 - 创建Bitmap对象:基于缩放比例和目标...

    ASP.NET+Flash多图片批量上传工具

    3. **预览功能**:在用户选择图片后,Flash可以读取文件内容并生成缩略图,实现在上传前的预览。这有助于用户确认他们选择的图片是否正确,同时也可以提供基本的质量检查。 4. **文件上传**:当用户确认图片后,...

    ASP 微信分享、朋友圈自定义缩略图内容

    ASP 微信分享、朋友圈自定义缩略图内容。 亲测可以使用。内含实例。

    Asp.net2.0电子商务网源码,采用三层架构开发,前台集成了产品在线展示,用户注册、在线调查、在线投稿,后台有类别管理\图书管理\订单管理\会员管理\配送范围管理\邮件列表\广告管理\友情链接管理等。后台添加图书时自动生成缩略图和文字水印,主要参考了petshop的设计架构、使用了Asp.net2.0中很多MemberShip、master等新功能。

    图书管理模块允许后台管理员添加图书,特别地,添加图书时系统能自动创建缩略图并添加文字水印,这展示了Asp.net2.0的图像处理能力。订单管理模块确保了购物车和结算流程的顺畅,而会员管理则涉及用户注册、登录、...

    ASP.NET html转图片

    最后,`GetThumbnailImage`方法用于生成缩略图,根据设定的`m_ThumbnailWidth`和`m_ThumbnailHeight`调整位图的大小,得到最终的缩略图。 整个过程涉及了.NET Framework的多线程编程、Windows Forms控件的使用、...

Global site tag (gtag.js) - Google Analytics