Use a System.Drawing.Image in an HTML tag

前端 未结 4 2019
忘了有多久
忘了有多久 2021-01-14 11:21

I have a potentially easy question. I have an image stored in a database, I then used a C# method in my application that gets that image and stores it in a custom class tha

相关标签:
4条回答
  • 2021-01-14 11:55

    I ended up going with Brads Method of solving this (See the comment under the question) I ended up creating a method that takes in a System.Drawing.Image and converts it to a byte array then encode that byte array to get the image. The code looks like the following:

    byte[] imgBytes = turnImageToByteArray(ind.ind.myImageFromDB);
    string imgString = Convert.ToBase64String(imgBytes);
    table += String.Format("img src=\"data:image/Bmp;base64,{0}\">", imgString);
    
    private byte[] turnImageToByteArray(System.Drawing.Image img)
    {
      MemoryStream ms = new MemoryStream();
      img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
      return ms.ToArray();
    }
    

    Currently this works for my purposes so thank you to everyone and their suggestions, as always everyone comes though and helps :-)

    0 讨论(0)
  • 2021-01-14 12:06

    If you have to store your images in the database, a simple way to view them would be to use an image handler.

    Basically, you can create an ASHX handler which accepts a query string that is the Image ID in the database and returns the image content along with the correct mime type. This is quite simple to do in C#.

    You can then point the <img /> tag to the handler with the specified ID. Something like

    table += String.Format("<image src='/ViewImage.ashx?id={0}' />", ind.myImageId);
    

    Here is a basic tutorial to get you started.

    A common performance improvement would be to cache the images on disk within the handler.

    0 讨论(0)
  • 2021-01-14 12:07

    If I were you, I'd keep image files on disk, and just have the image filenames in your db.

    If you're having a problem with your image formatting, than just look at your source and make sure it's correct.

    0 讨论(0)
  • 2021-01-14 12:15

    Images can be served using generic handlers (ashx files):

    public class StickerHandler : IHttpHandler
    {
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/png";
            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.BufferOutput = false;
    
            //TODO: link your MyImage to iSource using imageId query parameter...
            Image iSource = null;
            MemoryStream ms = new MemoryStream();
            iSource.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byte[] data = ms.ToArray();
            ms.Dispose();
            g.Flush();
            g.Dispose();
            iSource.Dispose();
    
            context.Response.BinaryWrite(data);
        }
    
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    
    }
    

    More about generic handlers can be found here:

    http://msdn.microsoft.com/en-us/library/bb398986(v=vs.100).aspx

    Inside your image:

    <img src='StickerHandler.ashx?img=imageId' />
    

    Happy coding!

    0 讨论(0)
提交回复
热议问题