相互学习、共同进步

不积细流,难以成江海;不积畦步,难以成千里----------小邓^_^
posts - 8, comments - 3, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2006年6月8日

在ASP.NET中上传图片并生成缩略图的C#源码 <FONT size=4><FONT size=4><FONT size=4>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing.Imaging;

namespace eMeng.Exam
{
/// <summary>
/// Thumbnail 的摘要说明。
/// </summary>
public class Thumbnail : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Label1.Text = "<h3>在ASP.NET里轻松实炙趼酝?lt;/h3>";
Button1.Text = "上载并显示缩略图";

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
HttpFileCollection MyFileColl = HttpContext.Current.Request.Files;
HttpPostedFile MyPostedFile = MyFileColl[0];

if (MyPostedFile.ContentType.ToString().ToLower().IndexOf("image") < 0)
{
Response.Write("无效的图形格式。");
return;
}
GetThumbNail(MyPostedFile.FileName, 100, 100,
MyPostedFile.ContentType.ToString(), false, MyPostedFile.InputStream);
}
private System.Drawing.Imaging.ImageFormat GetImageType(object strContentType)
{
if ((strContentType.ToString().ToLower()) == "image/pjpeg")
{
return System.Drawing.Imaging.ImageFormat.Jpeg;
}
else if ((strContentType.ToString().ToLower()) == "image/gif")
{
return System.Drawing.Imaging.ImageFormat.Gif;
}
else if ((strContentType.ToString().ToLower()) == "image/bmp")
{
return System.Drawing.Imaging.ImageFormat.Bmp;
}
else if ((strContentType.ToString().ToLower()) == "image/tiff")
{
return System.Drawing.Imaging.ImageFormat.Tiff;
}
else if ((strContentType.ToString().ToLower()) == "image/x-icon")
{
return System.Drawing.Imaging.ImageFormat.Icon;
}
else if ((strContentType.ToString().ToLower()) == "image/x-png")
{
return System.Drawing.Imaging.ImageFormat.Png;
}
else if ((strContentType.ToString().ToLower()) == "image/x-emf")
{
return System.Drawing.Imaging.ImageFormat.Emf;
}
else if ((strContentType.ToString().ToLower()) == "image/x-exif")
{
return System.Drawing.Imaging.ImageFormat.Exif;
}
else if ((strContentType.ToString().ToLower()) == "image/x-wmf")
{
return System.Drawing.Imaging.ImageFormat.Wmf;
}
else
{
return System.Drawing.Imaging.ImageFormat.MemoryBmp;
}
}

private void GetThumbNail(string strFileName, int iWidth, int iheight,
string strContentType, bool blnGetFromFile, System.IO.Stream ImgStream)
{
System.Drawing.Image oImg;

if (blnGetFromFile)
{
oImg = System.Drawing.Image.FromFile(strFileName);
}
else
{
oImg = System.Drawing.Image.FromStream(ImgStream);
}
oImg = oImg.GetThumbnailImage(iWidth, iheight, null, IntPtr.Zero);
string strGuid = System.Guid.NewGuid().ToString().ToUpper();
string strFileExt = strFileName.Substring(strFileName.LastIndexOf("."));
Response.ContentType = strContentType;
MemoryStream MemStream = new MemoryStream();
oImg.Save(MemStream, GetImageType(strContentType));
MemStream.WriteTo(Response.OutputStream);
}

}
}
</FONT></FONT></FONT><FONT color=#ff0000 size=4></FONT><FONT size=4>功能:
1。把图片文件(JPG GIF PNG)上传,
2。保存到指定的路径(在web.config中设置路径,以文件的原有格式保存),
3。并自动生成指定宽度的(在web.config中设置宽度)
4。和指定格式的(在web.config中指定缩略图的格式)
5。和原图比例相同的缩略图(根据宽度和原图的宽和高计算所略图的高度)
6。可以判断是否已经存在文件
7。如果不覆盖,则给出错误
8。如果选中"覆盖原图"checkbox,则覆盖原图。
9。可以根据要求,在webform上设置1个以上的file input和相应的checkbox
10。并在文件上传完毕后,显示原图的文件名,尺寸,字节,和
11。缩略图的文件名尺寸。
12。缩略图的文件名格式:原图+"_thumb."+指定格式,如:test.jpg_thumb.gif,以便于管理。

public void UploadFile(object sender, System.EventArgs e)
{

string imgNameOnly, imgNameNoExt, imgExt;
string imgThumbnail;
int erroNumber = 0;
System.Drawing.Image oriImg, newImg;
string strFePicSavePath = ConfigurationSettings.AppSettings["FePicSavePath"].ToString();
string strFePicThumbFormat = ConfigurationSettings.AppSettings["FePicThumbFormat"].ToString().ToLower();
int intFeThumbWidth = Int32.Parse(ConfigurationSettings.AppSettings["FePicThumbWidth"]);
string fileExt;

StringBuilder picInfo = new StringBuilder();

if(Page.IsValid)
{


for(int i = 0;i < Request.Files.Count; i++)
{
HttpPostedFile PostedFile = Request.Files[i];
fileExt = (System.IO.Path.GetExtension(PostedFile.FileName)).ToString().ToLower();

imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
if(fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".png")
{

if(System.IO.File.Exists(strFePicSavePath + imgNameOnly) && (checkboxlistRewrite.Items[i].Selected == false))
{
erroNumber = erroNumber + 1;
picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 已经存在,请修改文件名<br/>" );
}
}
else
{
erroNumber = erroNumber + 1;
picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 扩展名 " + fileExt + " 不被许可<br/>" );
}

}

if(erroNumber > 0)
{
picInfo.Append("<font color=red>全部操作均未完成,请修改错误,再进行操作</font><br/>");
}
else
{
for(int i = 0;i < Request.Files.Count; i++)
{

HttpPostedFile PostedFile = Request.Files[i];
imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
imgNameNoExt = System.IO.Path.GetFileNameWithoutExtension(PostedFile.FileName);
imgExt = System.IO.Path.GetExtension(PostedFile.FileName).ToString().ToLower();


oriImg = System.Drawing.Image.FromStream(PostedFile.InputStream);
newImg = oriImg.GetThumbnailImage(intFeThumbWidth, intFeThumbWidth * oriImg.Height/oriImg.Width,null,new System.IntPtr(0));
switch(imgExt)
{
//case ".jpeg":
case ".jpg":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case ".gif":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Gif);
break;
case ".png":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Png);
break;
}

//oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameNoExt + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

switch(strFePicThumbFormat)
{
//jpeg format can get the smallest file size, and the png is the largest size
//case "jpeg":
case "jpg":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;
case "gif":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.gif",System.Drawing.Imaging.ImageFormat.Gif);
imgThumbnail = imgNameOnly + "_thumb.gif";
break;
case "png":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.png",System.Drawing.Imaging.ImageFormat.Png);
imgThumbnail = imgNameOnly + "_thumb.png";
break;
default:
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;

}//switch

picInfo.Append("<b>文件 名:</b>" + imgNameOnly + " ( " + oriImg.Width + " x " + oriImg.Height + " ) " + PostedFile.ContentLength/1024 + "KB<br/>");
picInfo.Append("<b>缩略图名:</b>" + imgThumbnail + " ( " + newImg.Width + " x " + newImg.Height + " )<br/><br/>");

oriImg.Dispose();
newImg.Dispose();

}//for
picInfo.Append("<font color=red>所有操作成功</font><br/>");

}// if erronumber = 0

 

}
else
{
picInfo.Append("<font color=red>有错误,请检查。操作未成功</font><br/>");

}

lblPicInfo.Text = picInfo.ToString();

}
</FONT>

posted @ 2006-06-08 13:42 小邓 阅读(563) 评论(1) 编辑

 装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如:
int i = 10;
object obj = i; //隐式装箱
object obj = object(i); //显式装箱
if(obj is int) //int
       Console.WriteLine(“OK”);

Console.WriteLine(obj.GetType()); //System.Int32

有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;
有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;

posted @ 2006-06-08 13:38 小邓 阅读(124) 评论(0) 编辑

      我的女友很优秀,很出色,直至如今我仍想不出对她不一往情深的理由,她的优秀让我对所有感情的诱惑都不屑一顾,我们深深的倾情于对方,在校园那段美丽而又浪漫的日子里,我们身边全是羡慕的眼光。曾有一个喜欢我的女孩儿气乎乎的说我们的爱不会是永远,女友冲她做了个鬼脸,说我们是最幸福的一对。

  在学校的时光过得开心而又潇洒,几乎每一次我们都是挽着手一起去上晚自习,无论再冷再热的天气我们都会换着时间在对方宿舍楼下等待。下雪的时候她为了我去学织手套,结果手都扎破了,为这些我幸福得炫耀了好多天。我们一起去食堂打饭,一起看电影,一起逛街,所有能在一起的时间我们都没有错过。我很喜欢我去打蓝球她在旁边拎着手服为我加油的样子,我很怀念她坐在我的旧单车后面轻轻依*的感觉,我为她偷过花园里的玫瑰,为她和别人比赛爬高,结果我摔下来头都破了……。那些日子,是我一生的最快乐。

  毕业后,我们为了能在一起和各自的家人都闹翻了,他们说我们不会幸福,可那根本无济于事,没人能拦住我们。

  可是,我们从搬进租来房子的第一天起,就默不作声的坐了半天,因我们第一次知道了什么都没有的滋味,她的父母是机关干部,她是他们唯一的女儿;我的家人做生意,而我也是独子,衣来伸手,饭来张口的待遇一去不复返,好在我们是相爱的,我们是真心的,于是相视着笑了,拍拍手,开始了新的生活。

  社会给我们上了生动的一课。我们真正知道了有学历找工作也并非那么符合心愿,从起初的高不成低不就惭惭变成能挣钱的都干,体会了生活的艰辛,领教了现实的残酷,然而我们很开心,因为我们能在一起。

  第一个月发工资我给她买了条围巾,买了份烤鸭和饺子,她却哭了,像个委屈的孩子的在我怀里泣不成声,我的心酸透了,那一刻,我很难过。

  在寒冬的夜里,我们围着电暖哭取暖,她作出以苦思甜状*在我的肩头,她美丽的大眼睛里的那种眼神让我感觉很忧伤,我伏在她耳边说一定要让她过上好日子,我们一定会像从前那样让人羡慕的。她说能相爱已经是很幸福的事情了,我们还奢求什么呢?只要你能留在我的身边,只要我们永远都能这样相偎着互相取暖,只要你发工资还能记得给我买烤鸭和饺子,我就是世上最幸福的女人,再说那些有钱人未必会像我们这样相亲相爱,记住,我们是最幸福的一对,无论发生什么事情我都不要你离开我!

  她的话让我心头一热,紧紧的拥住她,我不敢让她看到我的眼泪,因为她喜欢坚强的男孩儿。我在心里一遍一遍告诉自己要努力,那晚我们再次海誓山盟,那晚我们幻想未来,那晚我们相约一辈子不离不弃。

  我想我们的爱够轰轰烈烈了,我想我们的情足以让天地动容了,可就在那晚,房东太太催我们交房租,我们的幸福很让她感动,但她眼睛里更多的是同情和怀疑。

  我们每次很穷的时候都会情不自禁的说起在学校的浪漫时光,那时我们不开心的时候只需在校园迷人的小路上拉着手走一段就没事了,那年的圣诞夜我跑遍了城市所有的精品屋才找到她喜爱已久的八音盒,那时她最爱给我讲王子与公主的故事,那时我的皮肤哪怕蹭破一块皮她也会心疼得掉眼泪。

  可是现在,我所能够给她的幸福只是在发工资时才舍得买的一份烤鸭和饺子。

  尽管生活慢慢的好起来,但这种所谓的进步只是相对于以前的寒酸。我们惭惭都有了个稳定的工作,也攒了一些钱,但从那时开始我们谈的最多的却成了如何买房子,我们幻想着有一天能有自己漂亮的私家车,她说她给我看中了一套皮尔。卡丹西服,她说要把我打造成一个完美男人。

  可我知道,每次路过美容店的时候她都很忧伤,当我看到她那美丽的容颜因缺少保养而有些黯然的时候,我一下子感觉到了自己在这个社会里的渺小,惭愧呀,但却只能苦笑!于是那天我花了六百块钱给她买了点美容用的东西,她高兴得像个孩子那样又蹦又跳,此情此景,我唯一能做的也许只能是长叹一口气吧!

  我去过她就职的那家广告公司,那些不漂亮的女人们背着意大利真皮皮包,穿着上千元的套装。我也去过她同事的家,那些漂亮房子里有着超大屏幕的背投影电视,有着可以将整个人都埋进去的舒适的沙发,有浪漫的灯光,有红酒,甚至养着名贵的狗。女主人在炫耀着她的名牌袜子,她价值昂贵的首饰,这一切,只是因为她们找了个有钱的老公,面对满屋子的时尚,我偷偷的脸红了。

  她们兴高采烈的谈论着一部最新引进大片,而我却想到了女友在菜市场为了一毛两毛钱和人讨价还价的模样,别人说这么漂亮的女孩儿还这么小气时她的无地自容;记得有天她偷偷对着镜子流泪,因为她那纤细而又娇嫩的手因洗衣而变得苍白,因为……,我不知道能够列举出多少因为,但我知道,这一切,只是因为我们还没有能够过上像在家里那样的生活,因为我们没有钱;记起挤公交车的尴尬;记起她委屈而又不欲外露的神情。

  我看了女友一眼,她双腮酡红,过了一会儿她提出有事要先告辞,我知道她是为我着想,我也清晰的记得,那一晚,我们都失眠了。

  从此她成了幸福但不快乐的女孩儿,她像我一样拼命的工作,打拼在这个现实的社会里,每天一下班都已是一身一心的疲惫,望着她曾经天真单纯而今写满倦意的脸庞,望着她为了不让我难过而强自微笑的表情,我的心碎了。

  于是我拼命的挣钱,像牛一样勤耕不辍,拉着我们的感情前行。我们的事业是有希望的,因为我们有才华,因为我们很努力,但成功却是一个漫长的过程。生活过的好一些了,但我们都知道在我们工作的那个圈子,我们依旧是贫下中农,我偷偷的学会了喝酒、抽烟。

  在二年七个月零十三天的那个晚上,她走了,留下一封让我心碎而又无奈的信,她说:宝贝儿,我很爱你,你知道的,我很爱你!为了你,我可以什么都不顾,为了你,我可以毫不犹豫的牺牲自己,你是我的一切,是我的幸福,可正是因为这份爱才让我决定离开你,我将所有的眼泪都留在了这间屋子里,我将所有的情谊都刻在了心里,可我不忍再看你为了让我过的好一点而不要命的工作,我不忍再看你在压力下日惭消瘦,你知道吗?每次你偷偷的喝酒回来,我的心都在痛啊!

  我很无奈,我们都很无奈,因为我不知道,没有钱,我们能爱多久?

  当初,为了你我留了下来,如今,为了你我要离开,我的背包里装满了让人心醉的回忆,也许有一天我还会回来,因为我爱你,没有你,我的生命便没有色彩,可是现在让我走吧,那样你会轻松一点,我们都会轻松一点,好吗?

  照顾自己……
                 
  “是啊!没有钱,我们能爱多久?”

  在她走后,我反复的吟念这句让人心酸的台词,眼泪再次无声的滑落……

posted @ 2006-06-08 11:34 小邓 阅读(75) 评论(1) 编辑