/// <summary> /// 获取指定长度的验证码图片 /// </summary> /// <param name="length">验证码长度</param> /// <param name="codeType">验证码类型</param> /// <returns>item1为验证码内容,item2为验证码字节数组</returns> public Tuple <string, byte[]> CreateImage(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.GreaterThan(0, "验证码长度必须大于0"); string code; switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.ChineseCharacter: code = GetRandomHanzis(length); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } var codeImage = CreateImage(code, codeType); byte[] imageBytes = null; using (MemoryStream stream = new MemoryStream()) { codeImage.Save(stream, ImageFormat.Png); imageBytes = stream.ToArray(); } return(Tuple.Create(code, imageBytes)); }
public void ValidateCode(string actionType, string id, ValidateCodeTemplate template) { if (ValidateCodeManager.HasValidateCode(actionType) == false) { return; } string tip; ValidateCodeType validateCodeType = ValidateCodeManager.GetValidateCodeTypeByAction(actionType); if (validateCodeType == null) { return; } tip = validateCodeType.Tip; if (id == null) { id = string.Empty; } bool disableIme = validateCodeType.DisableIme; string inputName = string.Format(Consts.ValidateCode_InputName, actionType, id); string imageUrl = ValidateCodeManager.GetValidateCodeImageUrl(actionType, false, id); template(inputName, tip, imageUrl, disableIme); }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> public Bitmap CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.CheckGreaterThan("length", 0); length = length < 1 ? 1 : length; switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(length); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } return(CreateImage(code, codeType)); }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> /// <param name="lenght"></param> /// <param name="code"></param> /// <param name="codeType"></param> /// <returns></returns> public Bitmap CreateImage(int lenght, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { lenght.CheckGreaterThan("lenght", 0); lenght = lenght < 1 ? 1 : lenght; switch (codeType) { case ValidateCodeType.Number: code = ""; break; case ValidateCodeType.NumberAndLetter: code = ""; break; default: code = ""; break; } if (code.Length > lenght) { code = code.Substring(0, lenght); } return(CreateImage(code, codeType)); }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { Check.CheckGreaterThan(length, 0, false, nameof(length)); return(codeType switch { ValidateCodeType.Number => GetRandomNums(length), ValidateCodeType.Hanzi => GetRandomHanzis(length), ValidateCodeType.NumberAndLetter => GetRandomNumsAndLetters(length), _ => string.Empty });
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> public Image CreateImage(string code, ValidateCodeType codeType) { Check.NotNullOrEmpty(code, nameof(code)); int width = FontWidth * code.Length + FontWidth, height = FontSize + FontSize / 2, flag = 255 / 2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag; Image image = new Bitmap(null, width, height); throw new NotImplementedException(); }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { switch (codeType) { case ValidateCodeType.Number: return(GetRandomNums(length)); case ValidateCodeType.Hanzi: return(GetRandomHanzis(length)); default: return(GetRandomNumsAndLetters(length)); } }
/// <summary> /// 发送验证码 /// </summary> /// <param name="mobile"></param> private string SendCode(string mobile, ValidateCodeType type) { var code = StringHelper.RandNum(6); _validateCodeRepository.Add(new Tbl_ValidateCode { ClientIp = ClientIpHelper.GetInnerIp(), ValidateCode = code, Mobile = mobile, TypeId = (int)type, DataStatus = false, CreateTime = DateTime.Now }); return(code); }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> /// <param name="length">长度</param> /// <param name="code">验证码</param> /// <param name="codeType">验证码类型</param> /// <returns></returns> public Bitmap CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { if (length <= 0) { throw new ArgumentOutOfRangeException(nameof(length)); } length = length < 1 ? 1 : length; code = GetCode(length, codeType); if (code.Length > length) { code = code.Substring(0, length); } return(CreateImage(code)); }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> /// <param name="length">长度</param> /// <param name="codeType">验证码类型</param> /// <returns></returns> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.CheckGreaterThan(nameof(length), 0); switch (codeType) { case ValidateCodeType.Number: return(GetRandomNumbers(length)); case ValidateCodeType.ChineseChar: return(GetRandomChinese(length)); default: return(GetRandomNumbersAndLetters(length)); } }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.GreaterThan(0, "验证码长度必须大于0"); switch (codeType) { case ValidateCodeType.Number: return(GetRandomNums(length)); case ValidateCodeType.ChineseCharacter: return(GetRandomHanzis(length)); default: return(GetRandomNumsAndLetters(length)); } }
public string GetCode(int lenght, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { lenght.CheckGreaterThan("lenght", 0); switch (codeType) { case ValidateCodeType.Number: GetRandomNums(lenght); break; case ValidateCodeType.NumberAndLetter: break; default: break; } return(""); }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> /// <param name="length">长度</param> /// <param name="codeType">验证码类型</param> /// <returns></returns> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { if (length <= 0) { throw new ArgumentOutOfRangeException(nameof(length)); } switch (codeType) { case ValidateCodeType.Number: return(GetRandomNumbers(length)); case ValidateCodeType.ChineseChar: return(GetRandomChinese(length)); default: return(GetRandomNumbersAndLetters(length)); } }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> public Bitmap CreateImage(int length, out string code, int imageWidth, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { if (length <= 0) { code = null; return(null); } length = length < 1 ? 1 : length; switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.Letter: code = GetRandomLetter(length); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(length); break; case ValidateCodeType.Add: code = GetRandomAddNum(); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } return(CreateImage(code, codeType, imageWidth)); }
public void ProcessRequest(System.Web.HttpContext context) { RequestVariable _request = RequestVariable.Current; string validateCode; string type = _request.Get("type", Method.Get, string.Empty); string isStyleType = _request.Get("isstyletype", Method.Get, "0"); string id = _request.Get("id", Method.Get, string.Empty); byte[] image; if (isStyleType == "1") { ValidateCodeType validateCodeType = ValidateCodeManager.GetValidateCodeType(type); if (validateCodeType == null) { return; } image = validateCodeType.CreateImage(out validateCode); } else { image = MaxLabs.bbsMax.ValidateCodes.ValidateCodeManager.CreateImage(type, out validateCode); } context.Session[Consts.ValidateCode_SessionKey_Prefix + type.ToLower() + id.ToLower().Trim()] = validateCode; context.Response.Clear(); context.Response.ContentType = "image/gif"; context.Response.Cache.SetCacheability(HttpCacheability.NoCache); context.Response.Cache.SetNoStore(); context.Response.BinaryWrite(image); context.Response.End(); }
/// <summary> /// 生成验证码 /// </summary> /// <param name="type"></param> /// <param name="length"></param> public static void Render(ValidateCodeType type, int length) { string code = string.Empty; switch (type) { case ValidateCodeType.Char: { code = CharCode.GetRandomChar(length); break; } case ValidateCodeType.Chinese: { code = ChineseCode.GetChinese(length); break; } case ValidateCodeType.Num: { code = RandomStr.GetRandomNum(length); break; } } System.Web.HttpContext.Current.Session[CodeName] = code; ImagesHelper images = new ImagesHelper(); images.Width = 100; images.Height = 31; images.Text = code; images.LineNoise = ImagesHelper.LineNoiseLevel.Extreme; images.BackgroundNoise = ImagesHelper.BackgroundNoiseLevel.Extreme; images.FontWarp = ImagesHelper.FontWarpFactor.Extreme; images.CreateImage(); }
/// <summary> /// 获取验证码的图片 /// </summary> /// <param name="length">长度</param> /// <param name="codeType">类型</param> /// <returns></returns> public static byte[] GetVerifyCodeImage(int length = 4, ValidateCodeType codeType = ValidateCodeType.Operation) { switch (codeType) { case ValidateCodeType.Hanzi: VerifyCode = GetRandomHanzis(length); break; case ValidateCodeType.Number: VerifyCode = GetRandomNums(length); break; case ValidateCodeType.NumberAndLetter: VerifyCode = GetRandomNumsAndLetters(length); break; default: VerifyCode = GetRandomOperation(); break; } var image = CreateGraphic(VerifyCode); return(image); }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> public Image CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { Check.GreaterThan(length, nameof(length), 0); switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(length); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } return(CreateImage(code, codeType)); }
public MemoryStream Create(out string code, ValidateCodeType validateCodeType = ValidateCodeType.Number, int numberLength = 4) { switch (validateCodeType) { case ValidateCodeType.English: code = GetRandomLetters(numberLength); break; case ValidateCodeType.NumberAndLetter: code = GetRandomNumsAndLetters(numberLength); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(numberLength); break; default: code = GetRandomNums(numberLength); break; } Bitmap Img = null; Graphics g = null; MemoryStream ms = null; Random random = new Random(); //验证码颜色集合 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; //验证码字体集合 string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; //定义图像的大小,生成图像的实例 Img = new Bitmap((int)code.Length * 18, 32); g = Graphics.FromImage(Img); //从Img对象生成新的Graphics对象 g.Clear(Color.White); //背景设为白色 //在随机位置画背景点 for (int i = 0; i < 100; i++) { int x = random.Next(Img.Width); int y = random.Next(Img.Height); g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); } //验证码绘制在g中 for (int i = 0; i < code.Length; i++) { int cindex = random.Next(7); //随机颜色索引值 int findex = random.Next(5); //随机字体索引值 Font f = new Font(fonts[findex], 15, FontStyle.Bold); //字体 Brush b = new SolidBrush(c[cindex]); //颜色 int ii = 4; if ((i + 1) % 2 == 0) //控制验证码不在同一高度 { ii = 2; } g.DrawString(code.Substring(i, 1), f, b, 3 + (i * 12), ii); //绘制一个验证字符 } ms = new MemoryStream(); //生成内存流对象 Img.Save(ms, ImageFormat.Png); //将此图像以Png图像文件的格式保存到流中 //回收资源 g.Dispose(); Img.Dispose(); return(ms); }
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> /// <param name="code"></param> /// <param name="codeType"></param> /// <returns></returns> public Bitmap CreateImage(string code, ValidateCodeType codeType) { code.CheckNotNullOrEmpty("code"); int width = FontWidth * code.Length + FontWidth; int height = FontSize + FontSize / 2; const int flag = 255 / 2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag; Bitmap image = new Bitmap(width, height); Graphics graphics = Graphics.FromImage(image); Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B)); int x, y = 3; if (HasBorder) { graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); } Random rnd = new Random(); //绘制干扰线 for (int i = 0; i < RandomLineCount; i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); int m = rnd.Next(image.Width); int n = rnd.Next(image.Height); Color lineColor = !RandomColor ? Color.FromArgb(90, 90, 90) : isBgLight ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 220)) : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); Pen pen = new Pen(lineColor, 2); graphics.DrawLine(pen, x, y, m, n); } //绘制干扰点 int pointCount = (int)(image.Width * image.Height * RandomPointPercent / 100); for (int i = 0; i < pointCount; i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); Color pointColor = isBgLight ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80)) : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200)); image.SetPixel(x, y, pointColor); } //绘制文字 for (int i = 0; i < code.Length; i++) { rnd = random; x = FontWidth / 4 + FontWidth * i; if (RandomPosition) { x = rnd.Next(FontWidth / 4) + FontWidth * i; y = rnd.Next(image.Height / 5); } PointF point = new PointF(x, y); if (RandomColor) { int r, g, b; if (!isBgLight) { r = rnd.Next(255 - BgColor.R); g = rnd.Next(255 - BgColor.G); b = rnd.Next(255 - BgColor.B); if ((r + g + b) / 3 < flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } else { r = rnd.Next(BgColor.R); g = rnd.Next(BgColor.G); b = rnd.Next(BgColor.B); if ((r + g + b) / 3 > flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } brush = new SolidBrush(Color.FromArgb(r, g, b)); } string fontName = codeType == ValidateCodeType.Chinese ? FontNamesForChinese[rnd.Next(FontNamesForChinese.Count)] : FontNames[rnd.Next(FontNames.Count)]; Font font = new Font(fontName, FontSize, FontStyle.Bold); if (RandomItalic) { graphics.TranslateTransform(0, 0); Matrix transform = graphics.Transform; transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f); graphics.Transform = transform; } graphics.DrawString(code.Substring(i, 1), font, brush, point); graphics.ResetTransform(); } return(image); }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> public Bitmap CreateImage(int length, out string code, int imageWidth, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { if (length <= 0) { code = null; return null; } length = length < 1 ? 1 : length; switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.Letter: code = GetRandomLetter(length); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(length); break; case ValidateCodeType.Add: code = GetRandomAddNum(); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } return CreateImage(code, codeType, imageWidth); }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.CheckGreaterThan("length", 0); switch (codeType) { case ValidateCodeType.Number: return GetRandomNums(length); case ValidateCodeType.Hanzi: return GetRandomHanzis(length); default: return GetRandomNumsAndLetters(length); } }
/// <summary> /// 获取指定长度的验证码图片 /// </summary> public Bitmap CreateImage(int length, out string code, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { length.CheckGreaterThan("length", 0); length = length < 1 ? 1 : length; switch (codeType) { case ValidateCodeType.Number: code = GetRandomNums(length); break; case ValidateCodeType.Hanzi: code = GetRandomHanzis(length); break; default: code = GetRandomNumsAndLetters(length); break; } if (code.Length > length) { code = code.Substring(0, length); } return CreateImage(code, codeType); }
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> public Bitmap CreateImage(string code, ValidateCodeType codeType) { code.CheckNotNullOrEmpty("code"); int width = FontWidth * code.Length + FontWidth; int height = FontSize + FontSize / 2; const int flag = 255 / 2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag; Bitmap image = new Bitmap(width, height); Graphics grap = Graphics.FromImage(image); grap.Clear(BgColor); Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B)); int x, y = 3; if (HasBorder) { grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); } Random rnd = Random; //绘制干扰线 for (int i = 0; i < RandomLineCount; i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); int m = rnd.Next(image.Width); int n = rnd.Next(image.Height); Color lineColor = !RandomColor ? Color.FromArgb(90, 90, 90) : isBgLight ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200)) : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); Pen pen = new Pen(lineColor, 2); grap.DrawLine(pen, x, y, m, n); } //绘制干扰点 for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); Color pointColor = isBgLight ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80)) : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200)); image.SetPixel(x, y, pointColor); } //绘制文字 for (int i = 0; i < code.Length; i++) { rnd = Random; x = FontWidth / 4 + FontWidth * i; if (RandomPosition) { x = rnd.Next(FontWidth / 4) + FontWidth * i; y = rnd.Next(image.Height / 5); } PointF point = new PointF(x, y); if (RandomColor) { int r, g, b; if (!isBgLight) { r = rnd.Next(255 - BgColor.R); g = rnd.Next(255 - BgColor.G); b = rnd.Next(255 - BgColor.B); if ((r + g + b) / 3 < flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } else { r = rnd.Next(BgColor.R); g = rnd.Next(BgColor.G); b = rnd.Next(BgColor.B); if ((r + g + b) / 3 > flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } brush = new SolidBrush(Color.FromArgb(r, g, b)); } string fontName = codeType == ValidateCodeType.Hanzi ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)] : FontNames[rnd.Next(FontNames.Count)]; Font font = new Font(fontName, FontSize, FontStyle.Bold); if (RandomItalic) { grap.TranslateTransform(0, 0); Matrix transform = grap.Transform; transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f); grap.Transform = transform; } grap.DrawString(code.Substring(i, 1), font, brush, point); grap.ResetTransform(); } return image; }
/// <summary> /// 获取指定长度的验证码字符串 /// </summary> public string GetCode(int length, ValidateCodeType codeType = ValidateCodeType.NumberAndLetter) { if (length <= 0) return null; switch (codeType) { case ValidateCodeType.Number: return GetRandomNums(length); case ValidateCodeType.Letter: return GetRandomLetter(length); case ValidateCodeType.Hanzi: return GetRandomHanzis(length); default: return GetRandomNumsAndLetters(length); } }
public static void Render(ValidateCodeType type) { Render(type, 4); }
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> public Bitmap CreateImage(string code, ValidateCodeType codeType, int imageWidth) { if (string.IsNullOrEmpty(code)) { return(null); } float width = imageWidth; float height = imageWidth * 0.36f; float scale = 120.0f / imageWidth; FontWidth = (int)(FontSize / scale); const int flag = 255 / 2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag; var image = new Bitmap((int)width, (int)height); Graphics grap = Graphics.FromImage(image); grap.Clear(BgColor); Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B)); int x, y = 3; if (HasBorder) { grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); } var rnd = new Random((int)DateTime.Now.Ticks); //绘制干扰线 for (int i = 0; i < RandomLineCount; i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); int m = rnd.Next(image.Width); int n = rnd.Next(image.Height); Color lineColor = !RandomColor ? Color.FromArgb(90, 90, 90) : isBgLight ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200)) : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); var pen = new Pen(lineColor, 2); grap.DrawLine(pen, x, y, m, n); } //绘制干扰点 for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); Color pointColor = isBgLight ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80)) : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200)); image.SetPixel(x, y, pointColor); } //绘制文字 for (int i = 0; i < code.Length; i++) { rnd = new Random(i * (int)DateTime.Now.Ticks); x = FontWidth / 4 + FontWidth * i; if (RandomPosition) { x = rnd.Next(FontWidth / 4) + FontWidth * i; y = rnd.Next(image.Height / 5); } var point = new PointF(x, 4); if (RandomColor) { int r, g, b; if (!isBgLight) { r = rnd.Next(255 - BgColor.R); g = rnd.Next(255 - BgColor.G); b = rnd.Next(255 - BgColor.B); if ((r + g + b) / 3 < flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } else { r = rnd.Next(BgColor.R); g = rnd.Next(BgColor.G); b = rnd.Next(BgColor.B); if ((r + g + b) / 3 > flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } brush = new SolidBrush(Color.FromArgb(r, g, b)); } string fontName = codeType == ValidateCodeType.Hanzi ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)] : FontNames[rnd.Next(FontNames.Count)]; var font = new Font(fontName, FontWidth, FontStyle.Regular); // "+"符号不做倾斜处理 if (RandomItalic && !code.Substring(i, 1).Equals("+")) { grap.TranslateTransform(0, 0); Matrix transform = grap.Transform; transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f); grap.Transform = transform; } grap.DrawString(code.Substring(i, 1), font, brush, point); grap.ResetTransform(); } return(image); }
public void ProcessRequest(HttpContext context) { string _validateCode = string.Empty; string _validateType = context.Request.Params["style"]; ValidateCodeType _createCode = null; if (string.IsNullOrEmpty(_validateType)) { _createCode = new ValidateCode_Style1(); } else { if (_validateType.CompareIgnoreCase("type1")) { _createCode = new ValidateCode_Style1(); } else if (_validateType.CompareIgnoreCase("type2")) { _createCode = new ValidateCode_Style2(); } else if (_validateType.CompareIgnoreCase("type3")) { _createCode = new ValidateCode_Style3(); } else if (_validateType.CompareIgnoreCase("type4")) { _createCode = new ValidateCode_Style4(); } else if (_validateType.CompareIgnoreCase("type5")) { _createCode = new ValidateCode_Style5(); } else if (_validateType.CompareIgnoreCase("type6")) { _createCode = new ValidateCode_Style6(); } else if (_validateType.CompareIgnoreCase("type7")) { _createCode = new ValidateCode_Style7(); } else if (_validateType.CompareIgnoreCase("type8")) { _createCode = new ValidateCode_Style8(); } else if (_validateType.CompareIgnoreCase("type9")) { _createCode = new ValidateCode_Style9(); } else if (_validateType.CompareIgnoreCase("type10")) { _createCode = new ValidateCode_Style10(); } else if (_validateType.CompareIgnoreCase("type11")) { _createCode = new ValidateCode_Style11(); } else if (_validateType.CompareIgnoreCase("type12")) { _createCode = new ValidateCode_Style12(); } else if (_validateType.CompareIgnoreCase("type13")) { _createCode = new ValidateCode_Style13(); } else if (_validateType.CompareIgnoreCase("type14")) { _createCode = new ValidateCode_Style14(); } else { _createCode = new ValidateCode_Style1(); } } byte[] _buffer = _createCode.CreateImage(out _validateCode); context.Session["validateCode"] = _validateCode; context.Response.ClearContent(); context.Response.ContentType = "image/Gif"; context.Response.BinaryWrite(_buffer); }
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> public Bitmap CreateImage(string code, ValidateCodeType codeType) { int width = FontWidth * code.Length + FontWidth; int height = FontSize + FontSize / 2; const int flag = 255 / 2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B) / 3 > flag; Bitmap image = new Bitmap(width, height); Graphics grap = Graphics.FromImage(image); grap.Clear(BgColor); Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B)); int x, y = 3; if (HasBorder) { grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); } Random rnd = Random; #region ////绘制干扰线 --弃用直线,改为曲线 //for (int i = 0; i < RandomLineCount; i++) //{ // x = rnd.Next(image.Width); // y = rnd.Next(image.Height); // int m = rnd.Next(image.Width); // int n = rnd.Next(image.Height); // Color lineColor = !RandomColor // ? Color.FromArgb(90, 90, 90) // : isBgLight // ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200)) // : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); // Pen pen = new Pen(lineColor, 2); // grap.DrawLine(pen, x, y, m, n); //} #endregion #region //绘制干扰线 for (int index = 0; index < RandomLineCount; index++) { float XSpace = image.Width / 6.0f; Color lineColor = !RandomColor ? Color.FromArgb(90, 90, 90) : isBgLight ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200)) : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); Pen CurvePen = new Pen(lineColor, 3); PointF[] CurvePointF = new PointF[image.Width / 6]; float keys = 0; float values = 0; for (int i = 0; i < image.Width / 6; i++) { keys = i * XSpace; values = Random.Next(image.Height); CurvePointF[i] = new PointF(keys, values); } grap.DrawCurve(CurvePen, CurvePointF, 0.5f); } #endregion #region ////绘制文字 for (int i = 0; i < code.Length; i++) { rnd = Random; x = FontWidth / 4 + FontWidth * i; if (RandomPosition) { x = rnd.Next(FontWidth / 4) + FontWidth * i; y = rnd.Next(image.Height / 5); } PointF point = new PointF(x, y); if (RandomColor) { int r, g, b; if (!isBgLight) { r = rnd.Next(255 - BgColor.R); g = rnd.Next(255 - BgColor.G); b = rnd.Next(255 - BgColor.B); if ((r + g + b) / 3 < flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } else { r = rnd.Next(BgColor.R); g = rnd.Next(BgColor.G); b = rnd.Next(BgColor.B); if ((r + g + b) / 3 > flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } brush = new SolidBrush(Color.FromArgb(r, g, b)); } string fontName = codeType == ValidateCodeType.Hanzi ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)] : FontNames[rnd.Next(FontNames.Count)]; Font font = new Font(fontName, FontSize, FontStyle.Bold); if (RandomItalic) { grap.TranslateTransform(0, 0); Matrix transform = grap.Transform; transform.Shear(Convert.ToSingle(rnd.Next(2, 9) / 10d - 0.5), 0.001f); grap.Transform = transform; } grap.DrawString(code.Substring(i, 1), font, brush, point); grap.ResetTransform(); } #endregion ///扭曲 if (IsTwistImage) { image = TwistImage(image, true, 3); } #region //绘制干扰点 for (int i = 0; i < (int)(image.Width * image.Height * RandomPointPercent / 100); i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); Color pointColor = isBgLight ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80)) : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200)); image.SetPixel(x, y, pointColor); } #endregion return(image); }
/// <summary> /// 获取指定字符串的验证码图片 /// </summary> public Bitmap CreateImage(string code, ValidateCodeType codeType, int imageWidth) { if (string.IsNullOrEmpty(code)) return null; float width = imageWidth; float height = imageWidth*0.36f; float scale = 120.0f/imageWidth; FontWidth = (int) (FontSize/scale); const int flag = 255/2; bool isBgLight = (BgColor.R + BgColor.G + BgColor.B)/3 > flag; var image = new Bitmap((int) width, (int) height); Graphics grap = Graphics.FromImage(image); grap.Clear(BgColor); Brush brush = new SolidBrush(Color.FromArgb(255 - BgColor.R, 255 - BgColor.G, 255 - BgColor.B)); int x, y = 3; if (HasBorder) { grap.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); } var rnd = new Random((int) DateTime.Now.Ticks); //绘制干扰线 for (int i = 0; i < RandomLineCount; i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); int m = rnd.Next(image.Width); int n = rnd.Next(image.Height); Color lineColor = !RandomColor ? Color.FromArgb(90, 90, 90) : isBgLight ? Color.FromArgb(rnd.Next(130, 200), rnd.Next(130, 200), rnd.Next(130, 200)) : Color.FromArgb(rnd.Next(70, 150), rnd.Next(70, 150), rnd.Next(70, 150)); var pen = new Pen(lineColor, 2); grap.DrawLine(pen, x, y, m, n); } //绘制干扰点 for (int i = 0; i < (int) (image.Width*image.Height*RandomPointPercent/100); i++) { x = rnd.Next(image.Width); y = rnd.Next(image.Height); Color pointColor = isBgLight ? Color.FromArgb(rnd.Next(30, 80), rnd.Next(30, 80), rnd.Next(30, 80)) : Color.FromArgb(rnd.Next(150, 200), rnd.Next(150, 200), rnd.Next(150, 200)); image.SetPixel(x, y, pointColor); } //绘制文字 for (int i = 0; i < code.Length; i++) { rnd = new Random(i*(int) DateTime.Now.Ticks); x = FontWidth/4 + FontWidth*i; if (RandomPosition) { x = rnd.Next(FontWidth/4) + FontWidth*i; y = rnd.Next(image.Height/5); } var point = new PointF(x, 4); if (RandomColor) { int r, g, b; if (!isBgLight) { r = rnd.Next(255 - BgColor.R); g = rnd.Next(255 - BgColor.G); b = rnd.Next(255 - BgColor.B); if ((r + g + b)/3 < flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } else { r = rnd.Next(BgColor.R); g = rnd.Next(BgColor.G); b = rnd.Next(BgColor.B); if ((r + g + b)/3 > flag) { r = 255 - r; g = 255 - g; b = 255 - b; } } brush = new SolidBrush(Color.FromArgb(r, g, b)); } string fontName = codeType == ValidateCodeType.Hanzi ? FontNamesForHanzi[rnd.Next(FontNamesForHanzi.Count)] : FontNames[rnd.Next(FontNames.Count)]; var font = new Font(fontName, FontWidth, FontStyle.Regular); // "+"符号不做倾斜处理 if (RandomItalic && !code.Substring(i, 1).Equals("+")) { grap.TranslateTransform(0, 0); Matrix transform = grap.Transform; transform.Shear(Convert.ToSingle(rnd.Next(2, 9)/10d - 0.5), 0.001f); grap.Transform = transform; } grap.DrawString(code.Substring(i, 1), font, brush, point); grap.ResetTransform(); } return image; }