- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章随机图片生成器制作方法分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
代码如下
/// <summary> /// PicHandler1 的摘要说明 /// </summary> 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 = "宋体"; 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(); //如果没有实现IRequiresSessionState,则这里会出错,也无法生成图片 context.Response.End(); } 。
//验证码生成 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,
。
/// <summary> /// VryImgGen 的摘要说明 /// </summary> public class VryImgGen { public static string ChineseChars = String.Empty,
/// <summary> /// 英文与数字串 /// </summary> protected static readonly string EnglishOrNumChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
public VryImgGen() { rnd = new Random(unchecked((int)DateTime.Now.Ticks)); } 。
/// <summary> /// 全局随机数生成器 /// </summary> private Random rnd,
int length = 5; /// <summary> /// 验证码长度(默认6个验证码的长度) /// </summary> public int Length { get { return length; } set { length = value; } } 。
int fontSize = 20; /// <summary> /// 验证码字体大小(为了显示扭曲效果,默认30像素,可以自行修改) /// </summary> public int FontSize { get { return fontSize; } set { fontSize = value; } } 。
int padding = 4; /// <summary> /// 边框补(默认4像素) /// </summary> public int Padding { get { return padding; } set { padding = value; } } 。
bool chaos = true; /// <summary> /// 是否输出燥点(默认输出) /// </summary> public bool Chaos { get { return chaos; } set { chaos = value; } } 。
Color chaosColor = Color.LightGray; /// <summary> /// 输出燥点的颜色(默认灰色) /// </summary> public Color ChaosColor { get { return chaosColor; } set { chaosColor = value; } } 。
int chaosWight = 1; /// <summary> /// 输出燥点的浓度 /// </summary> public int ChaosWight { get { return chaosWight; } set { chaosWight = value; } } 。
Color backgroundColor = Color.White; /// <summary> /// 自定义背景色(默认白色) /// </summary> 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 }; /// <summary> /// 自定义随机颜色数组 /// </summary> public Color[] Colors { get { return colors; } set { colors = value; } } 。
string[] fonts = { "Arial", "Georgia" }; /// <summary> /// 自定义字体数组 /// </summary> public string[] Fonts { get { return fonts; } set { fonts = value; } } 。
#region 产生波形滤镜效果 。
private const double PI = 3.1415926535897932384626433832795; private const double PI2 = 6.283185307179586476925286766559,
/// <summary> /// 正弦曲线Wave扭曲图片(Edit By 51aspx.com) /// </summary> /// <param name="srcBmp">图片路径</param> /// <param name="bXDir">如果扭曲则选择为True</param> /// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param> /// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param> /// <returns></returns> 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 。
/// <summary> /// 生成校验码图片 /// </summary> /// <param name="code">验证码</param> /// <returns></returns> 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; } 。
/// <summary> /// 生成随机字符码 /// </summary> /// <param name="codeLen">字符串长度</param> /// <param name="zhCharsCount">中文字符数</param> /// <returns></returns> 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); } 。
/// <summary> /// 生成默认长度5的随机字符码 /// </summary> /// <returns></returns> public string CreateVerifyCode() { return CreateVerifyCode(Length, 0); } 。
/// <summary> /// 生成英文或数字字符 /// </summary> /// <returns></returns> protected char CreateEnOrNumChar() { return EnglishOrNumChars[rnd.Next(0, EnglishOrNumChars.Length)]; } 。
/// <summary> /// 生成汉字字符 /// </summary> /// <returns></returns> protected char CreateZhChar() { //若提供了汉字集,查询汉字集选取汉字 if (ChineseChars.Length > 0) { return ChineseChars[rnd.Next(0, ChineseChars.Length)]; } //若没有提供汉字集,则根据《GB2312简体中文编码表》编码规则构造汉字 else { byte[] bytes = new byte[2],
//第一个字节值在0xb0, 0xf7之间 bytes[0] = (byte)rnd.Next(0xb0, 0xf8); //第二个字节值在0xa1, 0xfe之间 bytes[1] = (byte)rnd.Next(0xa1, 0xff),
//根据汉字编码的字节数组解码出中文汉字 string str1 = Encoding.GetEncoding("gb2312").GetString(bytes),
return str1[0]; } } 。
} 。
。
最后此篇关于随机图片生成器制作方法分享的文章就讲到这里了,如果你想了解更多关于随机图片生成器制作方法分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!