亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用mvc怎么實現一個圖片驗證碼功能

發布時間:2021-05-14 17:19:55 來源:億速云 閱讀:124 作者:Leah 欄目:開發技術

使用mvc怎么實現一個圖片驗證碼功能?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

mvc中實現圖片驗證碼很簡單,只需要創建一個 FileContentResult的方法,返回file就行

/// <summary>
    /// 創建一個文件方法
    /// </summary>
    /// <returns></returns>
    public FileContentResult GetCode() {
      //參數一:產生幾個字符的驗證碼圖片 參數二:驗證碼的形式(數字、字母、數字字母混合都有)
      ValidateCode validCode = new ValidateCode(5, ValidateCode.CodeType.Alphas);
        //將圖片轉換為二進制
      MemoryStream ms =validCode.CreateCheckCodeImage() as MemoryStream;
        dateCode = validCode.CheckCode; //通過 CheckCode獲取當前的驗證碼
      byte[] buffurPic = ms.ToArray(); 
      return File(buffurPic, "image/jpeg"); 
  
    }

以下是生成驗證碼代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
 
namespace Helper
{
  public class ValidateCode
  {
 
 
   #region Private Fields 
   private const double PI = 3.1415926535897932384626433832795; 
   private const double PI2 = 6.283185307179586476925286766559; 
   //private readonly int _wordsLen = 4; 
   private int _len;
   private CodeType _codetype;
   private readonly Single _jianju = (float)18.0; 
   private readonly Single _height = (float)24.0; 
   private string _checkCode; 
   #endregion 
   #region Public Property 
   public string CheckCode
   {
 
     get
     {
 
       return _checkCode;
 
     }
 
   }
 
   #endregion
 
   #region Constructors 
   ///  
   /// public constructors 
   /// 
   /// 驗證碼長度  
   /// 驗證碼類型:字母、數字、字母+ 數字 
 
   public ValidateCode(int len, CodeType ctype)
   { 
     this._len = len; 
     this._codetype = ctype;
 
   }
 
   #endregion 
   #region Public Field 
   public enum CodeType { Words, Numbers, Characters, Alphas } 
   #endregion 
   #region Private Methods
 
   public string GenerateNumbers()
   {
 
     string strOut = ""; 
     System.Random random = new Random();
     for (int i = 0; i < _len; i++)
     {
       string num = Convert.ToString(random.Next(10000) % 10); 
       strOut += num;
 
     }
 
     return strOut.Trim();
 
   }
 
 
 
   public string GenerateCharacters()
   {
 
     string strOut = ""; 
     System.Random random = new Random(); 
     for (int i = 0; i < _len; i++)
     {
       string num = Convert.ToString((char)(65 + random.Next(10000) % 26)); 
       strOut += num;
 
     }
 
     return strOut.Trim(); 
   }
 
   // 
 
   public string GenerateAlphas()
   {
     string strOut = ""; 
     string num = ""; 
     System.Random random = new Random();
     for (int i = 0; i < _len; i++)
     {
 
       if (random.Next(500) % 2 == 0)
       {
          num = Convert.ToString(random.Next(10000) % 10);
 
       }
 
       else
       { 
         num = Convert.ToString((char)(65 + random.Next(10000) % 26));
 
       }
 
       strOut += num;
 
     }
      return strOut.Trim();
 
   }
 
 
 
   private System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
   {
      System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
 
     // 將位圖背景填充為白色 
     System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp); 
     graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height); 
     graph.Dispose(); 
 
     double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
 
     for (int i = 0; i < destBmp.Width; i++)
     { 
       for (int j = 0; j < destBmp.Height; j++)
       { 
         double dx = 0;
         dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
         dx += dPhase; 
         double dy = Math.Sin(dx);
 

         // 取得當前點的顏色 
         int nOldX = 0, nOldY = 0;
         nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
         nOldY = bXDir ? j : j + (int)(dy * dMultValue);
 
         System.Drawing.Color color = srcBmp.GetPixel(i, j);
         if (nOldX >= 0 && nOldX < destBmp.Width 
          && nOldY >= 0 && nOldY < destBmp.Height)
         {
 
           destBmp.SetPixel(nOldX, nOldY, color);
 
         }
 
       }
 
     }
 
 
 
     return destBmp;
 
   }
 
   #endregion 
   #region Public Methods
 
   public Stream CreateCheckCodeImage()
   {
 
     string checkCode; 
     switch (_codetype)
     {
 
       case CodeType.Alphas:
          checkCode = GenerateAlphas();
         break;
 
       case CodeType.Numbers:
         checkCode = GenerateNumbers();
         break;
 
       case CodeType.Characters: 
         checkCode = GenerateCharacters(); 
         break; 
       default:
 
         checkCode = GenerateAlphas();
 
         break;
 
     }
 
     this._checkCode = checkCode; 
     MemoryStream ms = null;
 
     // 
 
     if (checkCode == null || checkCode.Trim() == String.Empty)
 
       return null;
 
     Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * _jianju)), (int)_height);
     Graphics g = Graphics.FromImage(image);
 
     try
     {
 
       Random random = new Random(); 
       g.Clear(Color.White); 
       // 畫圖片的背景噪音線 
       for (int i = 0; i < 18; i++)
       {
         int x1 = random.Next(image.Width); 
         int x2 = random.Next(image.Width);
         int y1 = random.Next(image.Height);
         int y2 = random.Next(image.Height);
 
         g.DrawLine(new Pen(Color.FromArgb(random.Next()), 1), x1, y1, x2, y2);
 
       }
 
       Font font = new System.Drawing.Font("Times New Roman", 14, System.Drawing.FontStyle.Bold); 
       LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
 
       if (_codetype != CodeType.Words)
       {
 
         for (int i = 0; i < checkCode.Length; i++)
         {
 
           g.DrawString(checkCode.Substring(i, 1), font, brush, 2 + i * _jianju, 1);
 
         }
 
       }
       else
       {
 
         g.DrawString(checkCode, font, brush, 2, 2);
 
       }
 
       // 畫圖片的前景噪音點 
 
       for (int i = 0; i < 150; i++)
       {
 
         int x = random.Next(image.Width); 
         int y = random.Next(image.Height); 
         image.SetPixel(x, y, Color.FromArgb(random.Next()));
 
       }
 
       // 畫圖片的波形濾鏡效果 
 
       if (_codetype != CodeType.Words)
       {
 
         image = TwistImage(image, true, 3, 1);
 
       }
 
       // 畫圖片的邊框線 
 
       g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); 
       ms = new System.IO.MemoryStream(); 
       image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
 
     }
 
     finally
     {
 
       g.Dispose(); 
       image.Dispose();
 
     }
 
     return ms;
 
   }
 
   #endregion
   
 
  }
}

關于使用mvc怎么實現一個圖片驗證碼功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

mvc
AI

沐川县| 蓝山县| 调兵山市| 米林县| 高平市| 司法| 新晃| 巴彦淖尔市| 黔西| 多伦县| 青河县| 从化市| 江安县| 莆田市| 长治县| 游戏| 桂林市| 霞浦县| 平凉市| 如东县| 临潭县| 凤阳县| 西充县| 巍山| 兴和县| 遂川县| 梧州市| 元氏县| 东丰县| 延寿县| 屏南县| 开化县| 太和县| 东安县| 淮北市| 芮城县| 治多县| 渭南市| 蒙山县| 本溪市| 封开县|