📄 antispamimagegen.aspx
字号:
<%@ Page language="C#" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="CommunityServer" %>
<%@ Import Namespace="CommunityServer.Components" %>
<script runat="server" language="C#">
void Page_Load(Object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
int charsNo = 6;
int fontSize = 30;
int bgWidth = 250;
int bgHeight = 80;
float x = (bgWidth - (charsNo * (fontSize + 0.5F))) / 2; // TODO: optimize
float y = (bgHeight - (fontSize * 1.7F)) / 2; // TODO: optimize
// Get params from QueryString
//
fontSize = CSContext.GetIntFromQueryString(context, "FontSize");
bgWidth = CSContext.GetIntFromQueryString(context, "ImgWidth");
bgHeight = CSContext.GetIntFromQueryString(context, "ImgHeight");
// Load defaults if params are empty
//
if(fontSize == -1) fontSize = 30;
if(bgWidth == -1) bgWidth = 290;
if(bgHeight == -1) bgHeight = 80;
// Generate the text
//
string genText = CreateTemporaryPassword(charsNo).ToUpper();
// Add the generate text to a session variable
//
Session.Add("forumsAntiSpamTextGen", genText);
// Create the memory map
//
Bitmap raster;
System.Drawing.Imaging.PixelFormat pixFormat = System.Drawing.Imaging.PixelFormat.Format32bppArgb;
// Select an memory image from file of 290x80 px
// in the current dir, NoSpamBgImgs folder named bg_X.jpg
//
Graphics graphicObj;
string bgFilePath = context.Server.MapPath(@".\AntiSpamBgImgs\bg_" + new Random().Next(5) + ".jpg");
System.Drawing.Image imgObj = System.Drawing.Image.FromFile(bgFilePath);
// Creating the raster image & graphic objects
//
raster = new Bitmap(imgObj, bgWidth, bgHeight);
graphicObj = Graphics.FromImage(raster);
// Creating an array for most readable yet cryptic fonts for OCR's
// This is entirely up to developer's discretion
// CAPTCHA recomandation
//
String[] crypticFonts = new String[10];
crypticFonts [0] = "Arial";
crypticFonts [1] = "Verdana";
crypticFonts [2] = "Comic Sans MS";
crypticFonts [3] = "Impact";
crypticFonts [4] = "Haettenschweiler";
crypticFonts [5] = "Lucida Sans Unicode";
crypticFonts [6] = "Garamond";
crypticFonts [7] = "Courier New";
crypticFonts [8] = "Book Antiqua";
crypticFonts [9] = "Arial Narrow";
// Instantiate object of brush with black color
//
SolidBrush[] brushes = new SolidBrush[1];
brushes [0] = new SolidBrush(Color.Black);
// Loop to write the characters on image with different fonts
// CAPTCHA method
//
for(int a = 0; a < genText.Length; a++) {
Font fontObj = new Font(crypticFonts[new Random().Next(a)], fontSize);
graphicObj.DrawString(genText.Substring(a, 1), fontObj, brushes[0], x + (a * fontSize), y);
}
// Flush again
//
graphicObj.Flush();
// Setting the response header content MIME type
//
context.Response.ContentType = "image/gif";
// Saving the file to output stream to be displayed in browser
//
raster.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
// Flushing to the Response
//
context.Response.Flush();
}
public static String CreateTemporaryPassword(int length) {
string strTempPassword = Guid.NewGuid().ToString("N");
strTempPassword = strTempPassword.Replace("0", "");
strTempPassword = strTempPassword.Replace("O", "");
for(int i = 0; i < (length / 32); i++) {
strTempPassword += Guid.NewGuid().ToString("N");
}
return strTempPassword.Substring(0, length);
}
</script>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -