none
Thumbnail a partir de uma imagem grande RRS feed

  • Pergunta

  • Bom dia.

    Eu tenho uma imagem grande no banco, em base 64. E preciso dela para apresentar quando a página do produto é aberta.

    O meu problema é exibir ela na página inicial, que não quero que apenas redimensione, pois ela continua pesada, queria criar um thumbnail a partir da imagem que tenho salva no banco.

    Existe alguma forma de fazer isso?

    Obrigado.

    Paulo Marcelo Dalbosco

    terça-feira, 16 de janeiro de 2018 12:49

Respostas

  • Bom dia,

    Para converter a imagem de base64 para Image, use esta função:

     public Image Base64ToImage(string base64String)
     {
        // Convert base 64 string to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        // Convert byte[] to Image
        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            Image image = Image.FromStream(ms, true);
            return image;
        }
     }

    Fonte: https://stackoverflow.com/a/18827264/1184708

    Para redimensionar a imagem retornada pela função, use este código:

    /// <summary>  
            /// resize an image and maintain aspect ratio  
            /// </summary>  
            /// <param name="image">image to resize</param>  
            /// <param name="newWidth">desired width</param>  
            /// <param name="maxHeight">max height</param>  
            /// <param name="onlyResizeIfWider">if image width is smaller than newWidth use image width</param>  
            /// <returns>resized image</returns>  
            public static Image Resize(Image image, int newWidth, int maxHeight, bool onlyResizeIfWider)  
            {  
                if (onlyResizeIfWider && image.Width <= newWidth) newWidth = image.Width;  
      
                var newHeight = image.Height * newWidth / image.Width;  
                if (newHeight > maxHeight)  
                {  
                    // Resize with height instead  
                    newWidth = image.Width * maxHeight / image.Height;  
                    newHeight = maxHeight;  
                }  
      
                var res = new Bitmap(newWidth, newHeight);  
      
                using (var graphic = Graphics.FromImage(res))  
                {  
                    graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;  
                    graphic.SmoothingMode = SmoothingMode.HighQuality;  
                    graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;  
                    graphic.CompositingQuality = CompositingQuality.HighQuality;  
                    graphic.DrawImage(image, 0, 0, newWidth, newHeight);  
                }  
      
                return res;  
            }  

    Fonte: http://www.c-sharpcorner.com/article/resize-image-in-c-sharp/

    Daí você pode colocar este código na sua controller:

    public class ImagesController: Controller
    {
        public byte[] ImageToByteArray(System.Drawing.Image imageIn)
        {
           using (var ms = new MemoryStream())
           {
            imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
              return  ms.ToArray();
           }
        }
    
        public ActionResult Index(string idDaImagemNoBanco)
        {
            var image = ...; // Obter do banco e utilizar as funções anteriores para converter de base64 para Image e redimensionar
            byte[] imageData = ImageToByArray(image);
            return File(imageData, "image/png"); // Might need to adjust the content type based on your actual image type
        }
    }

    Daí no seu HTML você usaria:

    <img src="/images/AlgumIdParaAImagem" />


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 17 de janeiro de 2018 10:22