主頁(yè) > 知識(shí)庫(kù) > ASP.NET圖片處理三類(lèi)經(jīng)典問(wèn)題

ASP.NET圖片處理三類(lèi)經(jīng)典問(wèn)題

熱門(mén)標(biāo)簽:西寧電銷(xiāo)外呼系統(tǒng)公司 寧德防封版電銷(xiāo)卡 聊城智能電銷(xiāo)機(jī)器人電話(huà) 安陸市地圖標(biāo)注app 云南外呼系統(tǒng)代理 辦公用地圖標(biāo)注網(wǎng)點(diǎn)怎么操作 上海市三維地圖標(biāo)注 海東防封電銷(xiāo)卡 南昌自動(dòng)外呼系統(tǒng)線(xiàn)路

 我們?cè)谧鰓eb程序的時(shí)候經(jīng)常會(huì)遇到一些圖片處理的問(wèn)題,今天就把遇到的需要圖片處理的地方給總結(jié)一下。也算是對(duì)自己學(xué)習(xí)過(guò)程的一個(gè)總結(jié),希望也能給大家一些啟發(fā)。
一、驗(yàn)證碼。
我們?cè)谀承┚W(wǎng)站注冊(cè)或者登錄的時(shí)候,都可能遇到要填寫(xiě)驗(yàn)證碼的地方,當(dāng)時(shí)沒(méi)搞懂這樣的圖片是怎樣一回事,事實(shí)上這是一張隨機(jī)生成的圖片,需要在后臺(tái)專(zhuān)門(mén)新建一個(gè)aspx頁(yè)或者ashx一般程序處理頁(yè)來(lái)專(zhuān)門(mén)負(fù)責(zé)生成這樣的圖片。下面就通過(guò)示例向大家演示這樣的一個(gè)過(guò)程!
首先我們新建一個(gè)登錄頁(yè),模擬用戶(hù)登錄。代碼如下: 

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è),用來(lái)生成驗(yàn)證碼圖片,在這個(gè)aspx頁(yè)中只需要在構(gòu)造函數(shù)中寫(xiě)如下代碼即可:

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)建的的位圖為畫(huà)板,當(dāng)然這里邊也以選擇一張已有的圖片作為畫(huà)板。只需要將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));//畫(huà)兩條直線(xiàn),起到一定的模糊驗(yàn)證的碼的效果
   g.DrawString(i.ToString(), new Font("宋體", 30), Brushes.Green, new PointF(0, 0));//將生成的四位數(shù)的驗(yàn)證碼繪到該畫(huà)板上
   bit.Save(Response.OutputStream, ImageFormat.Jpeg);//將該位圖保存為JPEG的格式
   Session["ValidateNo"] = i.ToString();//Seession值保存生成的驗(yàn)證碼的值,以便在登錄的時(shí)候和用戶(hù)輸入的驗(yàn)證碼的值做比較
   Response.ContentType = "image/jpeg";//將輸入類(lèi)型改為“Image/jpeg"
   Response.End();
  }

剛剛我們?cè)诖a里有說(shuō)到將生成的隨機(jī)驗(yàn)證碼保存在seesion中,那么我們?cè)诘卿浀臅r(shí)候就可以根據(jù)session中值的和用戶(hù)輸入的值做比較,以此來(lái)判斷用戶(hù)輸入驗(yàn)證碼是否正確,所以我們?cè)诘卿涰?yè)的aspx.cs頁(yè)做出這樣的處理:(這里只是模擬測(cè)試,在實(shí)際的開(kāi)發(fā)中,如果驗(yàn)證碼、密碼、賬號(hào)都正確的話(huà),就會(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ì)象并以此為畫(huà)板
    Graphics g = Graphics.FromImage(img);
    g.DrawString("Hello Olive!", new Font("宋體", 30), Brushes.GreenYellow, new PointF(20,20) );//將"Hello Olive"書(shū)寫(xiě)在圖片的(20,20)處
    g.Dispose();
    newPath = Server.MapPath(".") + "\\images\\" + fileName + "_New" + extension;
    img.Save(newPath);//將加有文字的圖片重新命名并保存,并刪除原來(lái)的圖片
    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è)、空間之類(lèi)的都有編輯個(gè)人信息的設(shè)置,在編輯個(gè)人信息的時(shí)候都可能會(huì)需要上傳頭像,下面我們來(lái)講一下如何生成略縮頭像。
頁(yè)面布局的話(huà)我們還是引用上邊的布局:
但是要在table>/table>再加一行,用來(lái)顯示生成的略縮圖。
首先我們需要新建一個(gè)CutImage類(lèi)CutImage.cs,專(zhuān)門(mén)用來(lái)對(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è)畫(huà)板
   Graphics gp = Graphics.FromImage(bitmap);
   gp.InterpolationMode = InterpolationMode.High;
   gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
   //清空畫(huà)布,并以背景色為透明色填充
   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)用縮放圖片的類(lèi)CutImage的CutImg函數(shù),這里直接保存為了“olive.jpg"是為了方便下面的引用顯示,也可保存為其他的名稱(chēng)和格式。
     luesuotu.ImageUrl = "~/images/olive.jpg";
   } 
   else
   {
    Response.Write("script>alert('請(qǐng)先選擇要上傳的文件!')/script>");
   }
  }

生成效果如圖:

為了方便大家的使用我已經(jīng)把圖片縮放功能封裝成了一個(gè)類(lèi),里邊還有其他的一些縮放的功能,已經(jīng)導(dǎo)出了類(lèi)模板,有興趣的朋友可以點(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)單好用功能齊全圖片上傳工具類(lèi)(水印、縮略圖、裁剪等)
  • ASP.NET中圖片顯示方法實(shí)例
  • Asp.Net上傳圖片同時(shí)生成高清晰縮略圖
  • asp.net文件上傳解決方案(圖片上傳、單文件上傳、多文件上傳、檢查文件類(lèi)型)
  • asp.net fileupload控件上傳圖片并預(yù)覽圖片
  • ASP.NET圖片上傳實(shí)例(附源碼)
  • ASP.NET實(shí)現(xiàn)上傳圖片并生成縮略圖的方法
  • asp.net實(shí)現(xiàn)圖片以二進(jìn)制流輸出的兩種方法
  • ASP.NET中Image控件使用詳解

標(biāo)簽:汕尾 崇左 青海 贛州 南寧 洛陽(yáng) 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET圖片處理三類(lèi)經(jīng)典問(wèn)題》,本文關(guān)鍵詞  ASP.NET,圖片,處理,三類(lèi),經(jīng)典,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET圖片處理三類(lèi)經(jīng)典問(wèn)題》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于ASP.NET圖片處理三類(lèi)經(jīng)典問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章