簡體   English   中英

通過Webservice返回驗證碼圖像(C#)

[英]Return captcha image by Webservice (c#)

我使用這篇文章來創建驗證碼圖像,並將其代碼放在WebService中以將圖像'Captcha返回給客戶端(app.js),但是我遇到了很多錯誤。

我的Web服務:

public class Captcha : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
        public Bitmap CaptchaImage()
        {
            bool noisy = true;
            var rand = new Random((int)DateTime.Now.Ticks);
            //generate new question
            int a = rand.Next(10, 99);
            int b = rand.Next(0, 9);
            var captcha = string.Format("{0} + {1} = ?", a, b);

            //store answer
            Session["Captcha-1"] = a + b;

            //image stream
            FileContentResult img = null; //get error for FileContentResult

            using (var mem = new MemoryStream())
            using (var bmp = new Bitmap(130, 30))
            using (var gfx = Graphics.FromImage((System.Drawing.Image)bmp))
            {
                gfx.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                gfx.SmoothingMode = SmoothingMode.AntiAlias;
                gfx.FillRectangle(Brushes.White, new Rectangle(0, 0, bmp.Width, bmp.Height));

                //add noise
                if (noisy)
                {
                    int i, r, x, y;
                    var pen = new Pen(Color.Yellow);
                    for (i = 1; i < 10; i++)
                    {
                        pen.Color = Color.FromArgb(
                        (rand.Next(0, 255)),
                        (rand.Next(0, 255)),
                        (rand.Next(0, 255)));

                        r = rand.Next(0, (130 / 3));
                        x = rand.Next(0, 130);
                        y = rand.Next(0, 30);

                        gfx.DrawEllipse(pen, x - r, y - r, r, r);
                    }
                }

                //add question
                gfx.DrawString(captcha, new Font("Tahoma", 15), Brushes.Gray, 2, 3);

                //render as Jpeg
                bmp.Save(mem, System.Drawing.Imaging.ImageFormat.Bmp);
                img = this.File(mem.GetBuffer(), "image/Jpeg"); //get error for .file
            }
                return img;
        }
}

有解決這些錯誤的方法嗎?

我最終通過以下代碼解決了:

   //render as Jpeg
   bmp.Save(mem, ImageFormat.Jpeg);
   byte[] imageBytes = mem.ToArray();
   string base64String = Convert.ToBase64String(imageBytes);
   //img = this.File(mem.GetBuffer(), "image/Jpeg");
   return base64String;
}
//return img;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM