2

I am using ASP.Net Core 2.1 Web API. I am trying to send base64 data from API endpoint like data:image/png;base64,xxxx and using it in HTML img tag. 1st and 2nd images render but 3rd and 4th don't.

My questions are:

  • How can I render the 3rd image without using JavaScript/JQuery?
  • What mistake am I making that my 4th image doesn't render?

I am new to Asp.Net Core. So if there is any childish mistake in code please correct.

Thaks in advance.

HTML

<!DOCTYPE html>
<html lang="en-us">
<head>
    <meta charset="utf-8" />

    <title>Image Test</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <p>
        1:- Image Through JavaScript
        <img id="sample-img" />
    </p>

    <script type="text/javascript">
        $(function () {
            var url = "https://localhost:44367/api/LatexImage/GetBase64Uri";
            $.get(url, function (data) {
                //console.log(data);
                $("#sample-img").attr('src', data);
            });
        })
    </script>
    <p>
        2:- Image from GetPng:
        <img src="https://localhost:44367/api/LatexImage/GetPng" />
    </p>
    <p>
        3:- Image from GetBase64Uri:
        <img src="https://localhost:44367/api/LatexImage/GetBase64Uri" />
    </p>

    <p>
        4:- Image from PngFromBase64:
        <img src="https://localhost:44367/api/LatexImage/PngFromBase64?Base64Png=iVBORw0KGgoAAAANSUhEUgAAADoAAAASCAIAAACFJlokAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAADtElEQVRIibVWW0gqXRReHWcItCBCtNLAkkAkqCCVqKDbgwS9FNH9wUK6QRT0ENGNiCAfgsCExBeDIkGksKJEejEiEkoxNJICkygfBC%2Fg5Ew5%2F8Oc31%2F0%2FIdOzfme1t7rW9%2F%2BZs3M3juLJEmgDziOJxIJGgVTgaIoQqMchmHz8%2FOVlZU0aqaivLw8i8bu7u%2Fvs9nsuro6ugQz8YNGLZfL9Ve9Ao1239%2FfURSlSy0VsVjMYDC4XC4AAJImmEwmm81Gl1oqNjc3w%2BHw0NCQ2Wymrbu3t7e1tbW%2FTEUikd3dXa%2FX%2B0kpp9NpNBqTw%2BvraxaLJRKJbm5u6LGLYRiCIFlZWZkpkiS3t7dbW1uXl5fPz8%2FTspFIJLPk4eFBr9cnhzqdDgDcbrdCofi6XRzHk%2FHp6Wl9ff0vaYlEwuFw5OXllZSUOByOtOzq6mpmSTAYFIvFqTN7e3sLCws8Hu%2BnXZ%2FPp1ar9Xp9OBz%2BjFeSJNva2uLxODVM2xPMZrNGo7m4uAgGgwwGQ6fT4Tju8%2Fl6eno%2BI26321EUVavV1OPt7OwQBOFyuSwWCwIAHo9Ho9Gsra1tbGxYLJbOzk6K5PF40oQ4HM7ExATVAIFA4HQ6pVJp2p6wvr7OZDLHxsY6OjqUSqVcLqfUVCpVfn7%2BZxrx9PSkUCiqqqp6e3tNJlMoFHp7ewsGg11dXQgALC4uDg8PM5nMgYGBoqIiqqyvr%2B83omw2WyKRXF5eSqVSq9WabO3z8%2FPJycnx8TEAxOPx5uZmANBqtTk5OVdXVywWq6mpye%2F3b21tUfz7%2B%2Fu5uTkq7u%2FvF4lEj4%2BP2dnZNTU14XAYwzAAGB8fT66LEAQRCASo9fh8PvnvIWcwGO7u7jK7Ozo6SsUVFRVarRYA3G731NQUNWmz2bhcLoIgXq83Nzf39fWVx%2BPFYrFoNPry8jI4OAgAxcXFKysrFH9mZiYZU7Db7SKRCADOzs4KCgrSDCAoihYWFhIEgSCI0Wisrq4WCoUA0N7e%2FvHxkcb%2B8eO%2FX1MikahUKoqT3BPEYrHVagUAvV4vEAiOjo5GRkYmJyf%2F9zVlQCgUOp1OHMcPDw%2Bnp6fTsoylpSWZTGYwGDweT0NDg0Ag%2BJlgMJAMMBiM1OKDgwOCIIRCYWlpKTXD5XIxDLPb7XK5PBAINDY2cjic35izWq0tLS2pMzweLxQK2Ww2pVJZVlaWXvCd82Z2dra7u5sgiC8r%2BP3%2BP%2BJ%2F6wIpk8mi0SiCfF2Ez%2Bf%2FEf9bF0iSJBOJRNoX8lfxD9Bi173YEwzdAAAAAElFTkSuQmCC" />
    </p>

</body>
</html>

ASP.Net Web API Controller

namespace LaTex.WebApi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LaTexImageController : ControllerBase
    {

        private const int _PX = 20;

        private async Task<byte[]> GetImgApiData( string tex, int px, int encoded)
        {

            if (px <= 0)
            {
                px = _PX;
            }

            if (string.IsNullOrEmpty(tex) || (tex.Trim().Length == 0))
            {
                tex = @"x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}";
            }

            if (encoded == 0)
            {
                tex = WebUtility.UrlEncode(tex);
            }

            string ImgApiUrl = $"https://chart.apis.google.com/chart?cht=tx&chs={px}&chl={tex}";

            using (HttpClient client = new HttpClient())
            {
                HttpResponseMessage response = await client.GetAsync(ImgApiUrl);
                byte[] bytes = await response.Content.ReadAsByteArrayAsync();

                return bytes;
            }
        }

        [HttpGet]
        public async Task<IActionResult> GetPng([FromQuery] string tex, int px, int encoded)
        {
            byte[] ImgApiDataBytes = await GetImgApiData(tex, px, encoded);
            return File(ImgApiDataBytes, "image/png");
        }

        public async Task<string> GetBase64([FromQuery] string tex, int px, int encoded)
        {
            byte[] ImgApiDataBytes = await GetImgApiData(tex, px, encoded);
            return (Convert.ToBase64String(ImgApiDataBytes));
        }

        [HttpGet]
        //public async Task<string> GetBase64Uri([FromQuery] string tex, int px, int encoded)
        public async Task<string> GetBase64Uri([FromQuery] string tex, int px, int encoded)
        {
            return ("data:image/png;base64," + await GetBase64(tex, px, encoded));
        }

        [HttpGet]
        public IActionResult PngFromBase64([FromQuery] string Base64Png)
        {
            byte[] image = Convert.FromBase64String(Base64Png);

            return File(image, "image/png");
        }
    }
}

1 Answer 1

2

Could provide the base64 data URI directly into the src attribute...

<img src="data:image/png;base64,BASE_64_PNG_DATA_GOES_HERE">

Sign up to request clarification or add additional context in comments.

2 Comments

Misread, not sure how to delete my answer since not relevant to the situation :/
Have you any idea if I replace src with an API endpoint that returns base64 Uri?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.