Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to make a random picture generator

2025-01-17 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/03 Report--

This article mainly introduces "how to make a random picture generator". In the daily operation, I believe that many people have doubts about how to make a random picture generator. The editor consulted all kinds of materials and sorted out simple and easy-to-use operation methods. I hope it will be helpful to answer the questions of "how to make a random picture generator"! Next, please follow the editor to study!

The copy code is as follows:

/ / /

/ Summary description of PicHandler1

/ / /

Public class PicHandler1: IHttpHandler, IRequiresSessionState

{

Private string mCheckNo = string.Empty

Protected ImgBuilder _ ImgBuilder = new ImgBuilder ()

Protected VryImgGen _ ImgBuilderNew = new VryImgGen ()

Private string _ text = string.Empty

Private string _ font = "Song style"

Private int _ fontSize = 8

Private int _ padding = 2

Public void ProcessRequest (HttpContext context)

{

MCheckNo = DisCheckNo ()

Context.Session ["CheckCode"] = mCheckNo

This._ImgBuilder.FontSize = this._fontSize

This._ImgBuilder.Padding = this._padding

If (! string.IsNullOrEmpty (this._font))

{

This._ImgBuilder.Fonts = new string [] {this._font}

}

This._ImgBuilderNew.ChaosWight = 40

This._ImgBuilderNew.FontSize = 25

This._ImgBuilderNew.Padding = 3

System.Drawing.Bitmap image =

This._ImgBuilderNew.CreateImage (mCheckNo)

System.IO.MemoryStream ms = new System.IO.MemoryStream ()

Image.Save (ms, System.Drawing.Imaging.ImageFormat.Jpeg)

Context.Response.ClearContent ()

Context.Response.ContentType = "image/Jpeg"

Context.Response.BinaryWrite (ms.ToArray ())

Context.Session ["CheckCode"] = mCheckNo.ToString (); / / if IRequiresSessionState is not implemented, there will be an error here and the picture cannot be generated

Context.Response.End ()

}

/ / CAPTCHA generation

Protected string DisCheckNo ()

{

String hash = HashCode.GetNext ()

String CheckNo = string.Empty

Random rd = new Random (DateTime.Now.Millisecond)

For (int I = 0; I

< 6; i++) { CheckNo += hash.Substring(rd.Next(1, hash.Length - 1), 1); } CheckNo = CheckNo.Replace("0", rd.Next(1, 9).ToString()); CheckNo = CheckNo.Replace("o", rd.Next(1, 9).ToString()); CheckNo = CheckNo.Replace("O", rd.Next(1, 9).ToString()); return CheckNo; } public bool IsReusable { get { return false; } } } 调用的类 复制代码 代码如下: using System; using System.Drawing; using System.Text; /// /// VryImgGen 的摘要说明 /// public class VryImgGen { public static string ChineseChars = String.Empty; /// /// 英文与数字串 /// protected static readonly string EnglishOrNumChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public VryImgGen() { rnd = new Random(unchecked((int)DateTime.Now.Ticks)); } /// /// 全局随机数生成器 /// private Random rnd; int length = 5; /// /// 验证码长度(默认6个验证码的长度) /// public int Length { get { return length; } set { length = value; } } int fontSize = 20; /// /// 验证码字体大小(为了显示扭曲效果,默认30像素,可以自行修改) /// public int FontSize { get { return fontSize; } set { fontSize = value; } } int padding = 4; /// /// 边框补(默认4像素) /// public int Padding { get { return padding; } set { padding = value; } } bool chaos = true; /// /// 是否输出燥点(默认输出) /// public bool Chaos { get { return chaos; } set { chaos = value; } } Color chaosColor = Color.LightGray; /// /// 输出燥点的颜色(默认灰色) /// public Color ChaosColor { get { return chaosColor; } set { chaosColor = value; } } int chaosWight = 1; /// /// 输出燥点的浓度 /// public int ChaosWight { get { return chaosWight; } set { chaosWight = value; } } Color backgroundColor = Color.White; /// /// 自定义背景色(默认白色) /// public Color BackgroundColor { get { return backgroundColor; } set { backgroundColor = value; } } Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; /// /// 自定义随机颜色数组 /// public Color[] Colors { get { return colors; } set { colors = value; } } string[] fonts = { "Arial", "Georgia" }; /// /// 自定义字体数组 /// public string[] Fonts { get { return fonts; } set { fonts = value; } } #region 产生波形滤镜效果 private const double PI = 3.1415926535897932384626433832795; private const double PI2 = 6.283185307179586476925286766559; /// /// 正弦曲线Wave扭曲图片(Edit By 51aspx.com) /// /// 图片路径 /// 如果扭曲则选择为True /// 波形的幅度倍数,越大扭曲的程度越高,一般为3 /// 波形的起始相位,取值区间[0-2*PI) /// public 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 /// /// 生成校验码图片 /// /// 验证码 /// public Bitmap CreateImage(string code) { int fSize = FontSize; int fWidth = fSize + Padding; int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2; int imageHeight = fSize * 2 + Padding * 2; System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth - 10, imageHeight - 10); Graphics g = Graphics.FromImage(image); g.Clear(BackgroundColor); //给背景添加随机生成的燥点 if (this.Chaos) { Pen pen = new Pen(ChaosColor, 0); int c = ChaosWight * 10; for (int i = 0; i < c; i++) { int x = rnd.Next(image.Width); int y = rnd.Next(image.Height); g.DrawRectangle(pen, x, y, 1, 1); } } int left = 0, top = 0, top1 = 1, top2 = 1; int n1 = (imageHeight - FontSize - Padding * 2); int n2 = n1 / 4; top1 = n2; top2 = n2 * 2; Font f; Brush b; int cindex, findex; //随机字体和颜色的验证码字符 for (int i = 0; i < code.Length; i++) { cindex = rnd.Next(Colors.Length - 1); findex = rnd.Next(Fonts.Length - 1); f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold); b = new System.Drawing.SolidBrush(Colors[cindex]); if (i % 2 == 1) { top = top2; } else { top = top1; } left = i * fWidth; g.DrawString(code.Substring(i, 1), f, b, left, top); } //画一个边框 边框颜色为Color.Gainsboro g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1); g.Dispose(); //产生波形(Add By 51aspx.com) image = TwistImage(image, true, 8, 4); return image; } /// /// 生成随机字符码 /// /// 字符串长度 /// 中文字符数 /// public string CreateVerifyCode(int codeLen, int zhCharsCount) { char[] chs = new char[codeLen]; int index; for (int i = 0; i < zhCharsCount; i++) { index = rnd.Next(0, codeLen); if (chs[index] == '\0') chs[index] = CreateZhChar(); else --i; } for (int i = 0; i < codeLen; i++) { if (chs[i] == '\0') chs[i] = CreateEnOrNumChar(); } return new string(chs, 0, chs.Length); } /// /// 生成默认长度5的随机字符码 /// /// public string CreateVerifyCode() { return CreateVerifyCode(Length, 0); } /// /// 生成英文或数字字符 /// /// protected char CreateEnOrNumChar() { return EnglishOrNumChars[rnd.Next(0, EnglishOrNumChars.Length)]; } /// /// 生成汉字字符 /// /// protected char CreateZhChar() { //若提供了汉字集,查询汉字集选取汉字 if (ChineseChars.Length >

0)

{

Return ChineseChars [rnd.Next (0, ChineseChars.Length)]

}

/ / if no Chinese character set is provided, Chinese characters are constructed according to the coding rules of "GB2312 simplified Chinese coding Table"

Else

{

Byte [] bytes = new byte [2]

/ / the first byte value is between 0xb0 and 0xf7

Bytes [0] = (byte) rnd.Next (0xb0, 0xf8)

/ / the second byte value is between 0xa1 and 0xfe

Bytes [1] = (byte) rnd.Next (0xa1, 0xff)

/ / Decoding Chinese characters according to the byte array encoded by Chinese characters

String str1 = Encoding.GetEncoding ("gb2312") .GetString (bytes)

Return str1 [0]

}

}

}

At this point, the study on "how to make a random picture generator" is over. I hope to be able to solve your doubts. The collocation of theory and practice can better help you learn, go and try it! If you want to continue to learn more related knowledge, please continue to follow the website, the editor will continue to work hard to bring you more practical articles!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report