代码改变世界

C#关于生成临时的验证码图片

2019-02-19 14:42  wolfer_3  阅读(283)  评论(0)    收藏  举报

前台代码如下:

<img src="/shhks/ReadTempImg.aspx?Uid=123" width="136" height="51"  id="ima_yz">

 

 

后台代码如下:

   protected void Page_Load(object sender, EventArgs e)
        {
            string TempNumber = Request.QueryString["Uid"];
            TempNumber = new Epoint.Common.Encrypt().DecryptedDataWithSymmKey(TempNumber).Replace("\\0", "");

            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(MapPath(Epoint.Frame.Bizlogic.common.GetApplicationPath() + "Images/Rzm_bg.gif"));
            int towidth = originalImage.Width;
            int toheight = originalImage.Height;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;
            //新建一个bmp图片
            System.Drawing.Image bitmap = new Bitmap(towidth, toheight);

            //新建一个画板
            Graphics g = Graphics.FromImage(bitmap);

            //设置高质量插值法
            g.InterpolationMode = InterpolationMode.High;

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = SmoothingMode.HighQuality;

            //清空画布并以透明背景色填充
            g.Clear(Color.Transparent);

            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
                new Rectangle(x, y, ow, oh),
                GraphicsUnit.Pixel);
            addWatermarkText(g, towidth, toheight, TempNumber);





            MemoryStream ms = new MemoryStream();
            byte[] imagedata = null;
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            imagedata = ms.GetBuffer();

            bitmap.Dispose();
            g.Dispose();

            Response.ContentType = "image/gif";
            Response.BinaryWrite(imagedata);// 在此处放置用户代码以初始化页面// 在此处放置用户代码以初始化页面
        }
        /// <summary>
        /// 加水印文字
        /// </summary>
        /// <param name="picture">imge 对象</param>
        /// <param name="_width">原始图片的宽度</param>
        /// <param name="_height">原始图片的高度.</param>
        private void addWatermarkText(Graphics picture, int _width, int _height, string WaterText)
        {
            ;
            Font crFont = null;
            SizeF crSize = new SizeF();

            Random rd = new Random();

            Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

            int rnCol = rd.Next(colors.Length);

            crFont = new Font("Arial", 28f, FontStyle.Bold);

            crSize = picture.MeasureString(WaterText, crFont);


            float xpos = 0;
            float ypos = 0;
            xpos = ((float)_width * (float).01) + (crSize.Width / 2);
            ypos = (float)_height * (float).01;


            StringFormat StrFormat = new StringFormat();
            StrFormat.Alignment = StringAlignment.Center;


            SolidBrush semiTransBrush2 = new SolidBrush(colors[rnCol]);
            picture.DrawString(WaterText, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat);

            SolidBrush semiTransBrush = new SolidBrush(colors[rnCol]);
            picture.DrawString(WaterText, crFont, semiTransBrush, xpos, ypos, StrFormat);


            semiTransBrush2.Dispose();
            semiTransBrush.Dispose();

        }