简体   繁体   English

使用Ajax将C#位图转换为HTML img无效

[英]C# Bitmap to Html img using ajax doesn't work

This is my C# code to make Bitmap 这是我制作位图的C#代码

   public void VerificationCode(int captchaWidth = 75, int captchaHeight = 25)
    {

        var colorList = new List<Color> { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Brown };


        Response.ContentType = "image/gif";

        Response.Clear();

        Response.BufferOutput = true;


        var randString = new Random((int)DateTime.Now.Ticks).Next(99999).ToString("00000");     

        Session["VerificationCode"] = randString;

        var bitmap = new Bitmap(captchaWidth, captchaHeight);            
        var graph = Graphics.FromImage(bitmap);            
        var font = new Font("Arial", 16, FontStyle.Italic);

        var fontColor = Color.FromArgb(153, 153, 153);            
        graph.Clear(Color.White);            
        graph.DrawString(randString, font, new SolidBrush(fontColor), 0, 0);

        var random = new Random((int)DateTime.Now.Ticks);
        var randomColor = new Random((int)DateTime.Now.Ticks);

        for (var i = 0; i < 100; i++)
        {
            var c = randomColor.Next(0, colorList.Count);
            var randPixelX = random.Next(0, captchaWidth);
            var randPixelY = random.Next(0, captchaHeight);
            bitmap.SetPixel(randPixelX, randPixelY, colorList[c]);
        }            
        bitmap.Save(Response.OutputStream, ImageFormat.Gif);
    }



 $('#ChangeCaptcha').on('click', function () {
        $.ajax({
            url: '@Url.Action("VerificationCode", "Base")',
            type: 'Get',
            async: false,
            success: function (data) {
                console.log(data);
                $('#CaptchaImage').attr('src', "data:image/gif;base64," + data);
            }
        });
    });

This is my Javascript code using ajax to get Bitmap to change img src. 这是我的Javascript代码,使用Ajax获取Bitmap来更改img src。 But It's doesn't work.I alway get error message. 但这不起作用,我总是收到错误消息。 Could any one can help me to fix this issue. 任何人都可以帮助我解决此问题。 I have used change minitype to "data:image/bmp;base64" or "data:image/gif," then I always get error. 我曾经使用minitype更改为“ data:image / bmp; base64”或“ data:image / gif”,然后总是出现错误。

在此处输入图片说明

You are serializing Bitmap to response stream. 您正在位图序列化为响应流。 Your JS will receive a .net serialized object of type System.Byte[] and not a Base64 encoded string. 您的JS会收到一个System.Byte[]类型的.net序列化对象,而不是Base64编码的字符串。

  1. Save your bitmap to byte array through MemoryStream.ToArray() 通过MemoryStream.ToArray()将位图保存到字节数组
  2. Convert this array to Base64 string with Convert.ToBase64String(bitmapBytes) 使用Convert.ToBase64String(bitmapBytes)将此数组转换为Base64字符串
  3. Send resulting string to JS 将结果字符串发送到JS

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM