I need to solve an image resizing problem in C#

Asked

Viewed 30 times

0

i am trying to implement a code to do image resizing because currently are uploading very large images on my system, however I am not able to perform resizing proportionally.

Follows the code in Asp.net-core MVC

        public async Task<string> SalvarImagemPBlog(long RedeId, IFormFile File, long BlogId, long ImagemId)
    {
        byte[] Arquivo = Convert.FromBase64String(PrepararArquivoBase64(File));

        Image image;

        //Converte byte[] para image
        using (MemoryStream ms = new MemoryStream(Arquivo))
        {
            image = Image.FromStream(ms);
        }

        // Resize a imagem
        Bitmap b = new Bitmap(400, 400);
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        //Alterar o DrawImage onde ta 200,200 caso apareça uma parte preta na imagem
        //Colocar no mesmo tamanho do resize
        g.DrawImage(image, 0, 0, 400, 400);
        
        g.Dispose();
        image = (Image)b;

        using (MemoryStream ms = new MemoryStream())
        {
            // Converte Image para byte[]
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            Arquivo = ms.ToArray();
        }

        return await SalvarArquivoBlob($"{this.Diretorio}/{RedeId}/Blog/{BlogId}", Arquivo, $"{File.FileName}");

    }

2 answers

0


        int size = 400;
        int w;
        int h;
        if (image.Width > image.Height)
        {
            h = size;
            w = image.Width * size / image.Height;
        }
        else
        {
            w = size;
            h = image.Height * size / image.Width;
        }
        var b = new Bitmap(w, h);
        using (var g = Graphics.FromImage(b))
            g.DrawImage(image, 0, 0, w, h);
    

0

People I managed to solve here, in case someone goes through something of the type, follows my solution

        public async Task<string> SalvarImagemPBlog(long RedeId, IFormFile File, long BlogId, long ImagemId)
    {
        byte[] Arquivo = Convert.FromBase64String(PrepararArquivoBase64(File));

        Image image;

        //Converte byte[] para image
        using (MemoryStream ms = new MemoryStream(Arquivo))
        {
            image = Image.FromStream(ms);
        }
        //Variaveis largura e altura adicionadas para fazer o ratio
        int largura = image.Width;
        int altura = image.Height;

        // Resize a imagem
        Bitmap b = new Bitmap(400, (altura * 400) / largura); /* aqui é onde é feito o ratio, notem que eu estou usando largura fixa*/
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        //Alterar o DrawImage para o mesmo tamanho do resize
        
        g.DrawImage(image, 0, 0, 400, (altura * 400) / largura);/* aqui é onde é feito o ratio da exibição, utilizar o mesmo tamanho que o new bitmap, ou então pode aparecer um espaço em preto*/
        g.Dispose();
        image = (Image)b;


        using (MemoryStream ms = new MemoryStream())
        {
            // Converte Image para byte[]
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            Arquivo = ms.ToArray();
        }

        return await SalvarArquivoBlob($"{this.Diretorio}/{RedeId}/Blog/{BlogId}", Arquivo, $"{File.FileName}");

    }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.