Mobile

26 mar, 2025

MAUI: compactando imagem Stream

Publicidade

Olá pessoal, meu nome é Mauricio Junior esta semana eu passei por um problema que tive que usar uma compactação de imagem para que tudo funcione como esperado. Para quem desenvolve aplicativo para plataformas diferentes, como iOS e Android, é necessário verificar quando funciona em uma plataforma e não em outra.

Problema

Para a plataforma iOS o backend estava voltando uma mensagem falando que a imagem estava muito grande para fazer upload e o mesmo código para Android estava funcionando super bem.

Solução

Para resolver o problema, eu criei um algorítmo para reduzir o tamanho da imagem antes de fazer o envio para o backend. Eu posso escolher para ter isso apenas para iOS ou para os dois, depende muito do seu requisito ou problema para uma plataforma ou outra.

Código

FileResult? photo;

//Take photo
photo = await MediaPicker.Default.CapturePhotoAsync();

//Choose photo
//photo = await MediaPicker.Default.PickPhotoAsync();

if (photo != null)
{    
    using (Stream stream = await photo.OpenReadAsync())
    {
        var imageFromStream = PlatformImage.FromStream(stream);
        if (imageFromStream != null)
        {
            var photoResized = imageFromStream.Resize(250, 250, ResizeMode.Stretch, true);
            var photoAsByte = await photoResized.AsBytesAsync(ImageFormat.Png);


            await stream.ReadAsync(photoAsByte);
            attach.FileContents = Convert.ToBase64String(photoAsByte);
        }
    }
}

1.1 – Código para upload

O primeiro ponto do código é criar uma variável chamada photo que pode ser preenchida com os métodos CapturephotoAsyn() ou PickPhotoAsync(). A diferença de um ou outro é que um pega o dado quando tira uma foto e o outro pega a foto da biblioteca.

Depois de verificar se a variável for diferente de null, então começa a parte de pegar a imagem, transformar em Stream, redefinir o tamanho e formato e para finalizar transformo em Base64 para gravar os dados no database.

Note que o Resize foi feito para width = 250 e height = 250 com o formato .Png. Você pode mudar isso facilmente colocando qualquer tamanho e extensão.

Qualquer dúvida pode entrar em contato pelo site https://mauriciojunior.net