ASP.NET圖片處理三類經(jīng)典問題
我們?cè)谧鰓eb程序的時(shí)候經(jīng)常會(huì)遇到一些圖片處理的問題,今天就把遇到的需要圖片處理的地方給總結(jié)一下。也算是對(duì)自己學(xué)習(xí)過程的一個(gè)總結(jié),希望也能給大家一些啟發(fā)。
一、驗(yàn)證碼。
我們?cè)谀承┚W(wǎng)站注冊(cè)或者登錄的時(shí)候,都可能遇到要填寫驗(yàn)證碼的地方,當(dāng)時(shí)沒搞懂這樣的圖片是怎樣一回事,事實(shí)上這是一張隨機(jī)生成的圖片,需要在后臺(tái)專門新建一個(gè)aspx頁(yè)或者ashx一般程序處理頁(yè)來專門負(fù)責(zé)生成這樣的圖片。下面就通過示例向大家演示這樣的一個(gè)過程!
首先我們新建一個(gè)登錄頁(yè),模擬用戶登錄。代碼如下:
<div> <table> <tr><td>賬號(hào):</td><td> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td></tr> <tr><td>密碼:</td><td> <asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox></td></tr> <tr><td>驗(yàn)證碼:</td><td> <asp:Image ID="Image1" runat="server" ImageUrl="ValidateNo.aspx" /></td></tr> <tr><td>請(qǐng)輸入:</td><td> <asp:TextBox ID="txtyzm" runat="server"></asp:TextBox></td></tr> <tr><td> <asp:Button ID="btndl" runat="server" Text="登錄" onclick="btndl_Click" /></td><td> <asp:Button ID="Button2" runat="server" Text="取消" CausesValidation=false /></td></tr> </table> </div>
布局如圖:
然后再新建一個(gè)ValidateNo.aspx頁(yè),用來生成驗(yàn)證碼圖片,在這個(gè)aspx頁(yè)中只需要在構(gòu)造函數(shù)中寫如下代碼即可:
protected void Page_Load(object sender, EventArgs e) { Random r = new Random(); int i = r.Next(1000, 9999);//生成一個(gè)四位的隨機(jī)數(shù) Bitmap bit = new Bitmap(100, 40);//生成一個(gè)尺寸為100,40的位圖 Graphics g = Graphics.FromImage(bit);//創(chuàng)建一個(gè)繪圖實(shí)例,并以上邊創(chuàng)建的的位圖為畫板,當(dāng)然這里邊也以選擇一張已有的圖片作為畫板。只需要將FromImage()里的參數(shù)換位已存在的Image對(duì)象即可 g.DrawLine(new Pen(Brushes.Blue), new Point(0, 10), new Point(100, 10)); g.DrawLine(new Pen(Brushes.GreenYellow), new Point(0, 25), new Point(100, 25));//畫兩條直線,起到一定的模糊驗(yàn)證的碼的效果 g.DrawString(i.ToString(), new Font("宋體", 30), Brushes.Green, new PointF(0, 0));//將生成的四位數(shù)的驗(yàn)證碼繪到該畫板上 bit.Save(Response.OutputStream, ImageFormat.Jpeg);//將該位圖保存為JPEG的格式 Session["ValidateNo"] = i.ToString();//Seession值保存生成的驗(yàn)證碼的值,以便在登錄的時(shí)候和用戶輸入的驗(yàn)證碼的值做比較 Response.ContentType = "image/jpeg";//將輸入類型改為“Image/jpeg" Response.End(); }
剛剛我們?cè)诖a里有說到將生成的隨機(jī)驗(yàn)證碼保存在seesion中,那么我們?cè)诘卿浀臅r(shí)候就可以根據(jù)session中值的和用戶輸入的值做比較,以此來判斷用戶輸入驗(yàn)證碼是否正確,所以我們?cè)诘卿涰?yè)的aspx.cs頁(yè)做出這樣的處理:(這里只是模擬測(cè)試,在實(shí)際的開發(fā)中,如果驗(yàn)證碼、密碼、賬號(hào)都正確的話,就會(huì)導(dǎo)向新的頁(yè)面)
protected void btndl_Click(object sender, EventArgs e) { if (Session["ValidateNo"] != null) { string s = Session["ValidateNo"].ToString(); if (txtyzm.Text != s) { Response.Write("<script>alert('"+s+"')</script>"); } else { Response.Write("<script>alert('OK')</script>"); } } else { Response.Write("<script>alert('驗(yàn)證碼暫不存在!')</script>"); } }
二、給圖片加文字
有時(shí)候我們會(huì)看到有些個(gè)人空間或主頁(yè)的圖片都加有相應(yīng)的文字,就像騰訊微博那種發(fā)一張圖片會(huì)顯示騰訊微博字樣。下面我就給大家展示下如何在圖片上添加文字。
首先我們新建一個(gè)aspx頁(yè),頁(yè)面布局如下:
<table style="background:lightblue"><tr><td>選擇上傳文件:</td><td><asp:FileUpload ID="FileUpload1" runat="server" /></td><td> <asp:Button ID="btnupload" runat="server" Text="上傳圖片" onclick="btnupload_Click" /></td></tr> <tr><td colspan="3"> <asp:Image ID="TouXiang" runat="server" /></tr> </table> 然后我們?cè)赽tnuplod按鈕的Click事件的處理函數(shù)中做如下操作: protected void btnupload_Click(object sender, EventArgs e) { if (FileUpload1.FileName.Trim() != "") { string extension = Path.GetExtension(FileUpload1.FileName);//先獲取文件的后綴 string fileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Minute.ToString();//以當(dāng)前的日期,以年月分的格式為上傳的圖片重命名 string path = Server.MapPath(".")+"\\images\\"+fileName + extension; FileUpload1.PostedFile.SaveAs(path);//將圖片保存在指定路徑下 Bitmap img = new Bitmap(path);//新建一個(gè)Bitmap對(duì)象并以此為畫板 Graphics g = Graphics.FromImage(img); g.DrawString("Hello Olive!", new Font("宋體", 30), Brushes.GreenYellow, new PointF(20,20) );//將"Hello Olive"書寫在圖片的(20,20)處 g.Dispose(); newPath = Server.MapPath(".") + "\\images\\" + fileName + "_New" + extension; img.Save(newPath);//將加有文字的圖片重新命名并保存,并刪除原來的圖片 img.Dispose(); if (File.Exists(path)) { File.Delete(path); } touxiangpath="~/images/" + fileName + "_New" + extension; } else { Response.Write("<script>alert('請(qǐng)先選擇要上傳的文件!')</script>"); } }
效果如圖:
三、生成略縮圖
現(xiàn)在的很多博客、個(gè)人主頁(yè)、空間之類的都有編輯個(gè)人信息的設(shè)置,在編輯個(gè)人信息的時(shí)候都可能會(huì)需要上傳頭像,下面我們來講一下如何生成略縮頭像。
頁(yè)面布局的話我們還是引用上邊的布局:
但是要在<table></table>再加一行,用來顯示生成的略縮圖。
首先我們需要新建一個(gè)CutImage類CutImage.cs,專門用來對(duì)圖片進(jìn)行縮放,如下:
/// <summary>(該圖片縮放的代碼參考自博客園博主king-兩色天)
/// 截取圖片
/// </summary>
/// <param name="oPath">原圖片路徑</param>
/// <param name="nPaht">新圖片路徑</param>
/// <param name="w">略縮圖的寬度</param>
/// <param name="h">略縮圖的高度</param>
/// <param name="mode">截取模式</param>
代碼:
public static void CutImg(string oPath, string nPaht, int w, int h,string mode) { Image oimg = Image.FromFile(oPath); int nToWidth = w; int nToHeight = h; int x = 0; int y = 0; int oWidth = oimg.Width; int oHeight = oimg.Height; switch (mode) { case "HW"://按照指定的寬高進(jìn)行縮放,可能變形 break; case "W"://指定寬度,高按比例縮放 nToHeight = oWidth * oHeight / nToWidth; break; case "H"://指定高度,寬按比例縮放 nToWidth=oWidth*oHeight/nToHeight; break; case "CUT"://按照指定的寬、高縮放 if ((oimg.Width / oimg.Height) > (nToWidth / nToHeight)) { oHeight = oimg.Height; oWidth = oimg.Height * nToWidth / nToHeight; y = 0; x = (oimg.Width - oWidth) / 2; } else { oWidth = oimg.Width; oHeight = oimg.Width * nToHeight / nToWidth; x = 0; y = (oimg.Height - oHeight) / 2; } break; default: break; } //新建一個(gè)BMP圖片 Image bitmap = new Bitmap(nToWidth, nToHeight); //新建一個(gè)畫板 Graphics gp = Graphics.FromImage(bitmap); gp.InterpolationMode = InterpolationMode.High; gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //清空畫布,并以背景色為透明色填充 gp.Clear(Color.Transparent); gp.DrawImage(oimg, new Rectangle(0, 0, nToWidth, nToHeight), new Rectangle(x, y, oWidth, oHeight), GraphicsUnit.Pixel);//繪制出新的略縮圖 try { bitmap.Save(nPaht, System.Drawing.Imaging.ImageFormat.Jpeg); } catch(Exception e) { throw e; } finally { oimg.Dispose(); bitmap.Dispose(); } }
然后我們的aspx頁(yè)的btnupload按鈕的Click事件的處理函數(shù)代碼如下:
protected void btnupload_Click(object sender, EventArgs e) { if (FileUpload1.FileName.Trim() != "") { //....... //.......前邊都省略了代碼是一樣的 if (File.Exists(path)) { File.Delete(path); } string p = Server.MapPath(".") + "\\images\\"; touxiangpath="~/images/" + fileName + "_New" + extension; TouXiang.ImageUrl = touxiangpath; CutImage.CutImg(newPath, p+"olive.jpg", 100, 200, "CUT");//調(diào)用縮放圖片的類CutImage的CutImg函數(shù),這里直接保存為了“olive.jpg"是為了方便下面的引用顯示,也可保存為其他的名稱和格式。 luesuotu.ImageUrl = "~/images/olive.jpg"; } else { Response.Write("<script>alert('請(qǐng)先選擇要上傳的文件!')</script>"); } }
生成效果如圖:
為了方便大家的使用我已經(jīng)把圖片縮放功能封裝成了一個(gè)類,里邊還有其他的一些縮放的功能,已經(jīng)導(dǎo)出了類模板,有興趣的朋友可以點(diǎn)擊下載ImageCut.zip,希望可以給大家一些幫助。
- Asp.net FileUpload+Image制作頭像效果示例代碼
- asp.net顯示圖片到指定的Image控件中 具體實(shí)現(xiàn)
- asp.net驗(yàn)證碼圖片生成示例
- ASP.NET實(shí)現(xiàn)圖片以二進(jìn)制的形式存入數(shù)據(jù)庫(kù)
- 使用asp.net改變網(wǎng)頁(yè)上圖片顏色比如灰色變彩色
- 使用asp.net改變圖片顏色如灰色的變成彩色
- Asp.net簡(jiǎn)單實(shí)現(xiàn)給圖片增加文字水印
- ASP.NET簡(jiǎn)單好用功能齊全圖片上傳工具類(水印、縮略圖、裁剪等)
- ASP.NET中圖片顯示方法實(shí)例
- Asp.Net上傳圖片同時(shí)生成高清晰縮略圖
- asp.net文件上傳解決方案(圖片上傳、單文件上傳、多文件上傳、檢查文件類型)
- asp.net fileupload控件上傳圖片并預(yù)覽圖片
- ASP.NET圖片上傳實(shí)例(附源碼)
- ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法
- asp.net實(shí)現(xiàn)圖片以二進(jìn)制流輸出的兩種方法
- ASP.NET中Image控件使用詳解
相關(guān)文章
asp.net子窗體與父窗體交互實(shí)戰(zhàn)分享
用到了兩個(gè)頁(yè)面,其中Default.aspx作為父頁(yè)面,Default2.aspx作為子頁(yè)面被彈出。Default.aspx頁(yè)面上有兩個(gè)TextBox一個(gè)Button通過測(cè)試我們可以看出我們保留了先輸入到父窗體中的值,又接收了從子窗體傳遞過來的值2013-02-02創(chuàng)建第一個(gè)ASP.NET應(yīng)用程序(第1節(jié))
本文通過創(chuàng)建第一個(gè)ASP.NET應(yīng)用程序,了解.net代碼后置技術(shù)以及事件驅(qū)動(dòng)機(jī)制和web頁(yè)面設(shè)計(jì)中的基本控件使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08asp.net防止刷新時(shí)重復(fù)提交(可禁用工具條刷新按鈕)
前段時(shí)間遇到了需要禁用刷新的需求,f5按鈕就不說了,簡(jiǎn)單的js就能把它禁用,但是工具條上的刷新按鈕卻防止不了啊,不過本文介紹的一種方法卻可以解決此問題,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01.Net平臺(tái)開發(fā)實(shí)踐的一些點(diǎn)滴總結(jié)(技術(shù)規(guī)范與實(shí)踐精華)
以下是本人對(duì).Net平臺(tái)開發(fā)實(shí)踐的一些點(diǎn)滴總結(jié)。這里的技術(shù)規(guī)范主要是開發(fā)過程的代碼規(guī)范、數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范、Com和.Net互操作規(guī)范;實(shí)踐精華是對(duì)技術(shù)實(shí)踐過程中的部分總結(jié)。2010-04-04Asp.NET 隨機(jī)碼生成基類(隨機(jī)字母,隨機(jī)數(shù)字,隨機(jī)字母+數(shù)字)
對(duì)于需要用asp.net 字母,隨機(jī)數(shù)字,隨機(jī)字母+數(shù)字生成隨機(jī)碼的朋友用的到2008-11-11