C# Bitmap to Html img 使用 ajax 不起作用

这是我制作位图的 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);

            }

        });

    });

这是我使用 ajax 获取位图以更改 img src 的 Javascript 代码。但它不起作用。我总是收到错误消息。任何人都可以帮助我解决这个问题。我已经将 minitype 更改为“data:image/bmp;base64”或“data:image/gif”,然后总是出错。

http://img4.mukewang.com/60d830c80001b79b15110276.jpg

慕工程0101907
浏览 242回答 1
1回答

一只萌萌小番薯

您正在将Bitmap序列化为响应流。您的 JS 将收到一个 .net 序列化类型的对象,System.Byte[]而不是 Base64 编码的字符串。通过将位图保存到字节数组&nbsp;MemoryStream.ToArray()将此数组转换为 Base64 字符串&nbsp;Convert.ToBase64String(bitmapBytes)将结果字符串发送到 JS
打开App,查看更多内容
随时随地看视频慕课网APP