Usuário com melhor resposta
Perda de qualidade ao salvar imagem

Pergunta
-
Galera,
Não sei porque, mas ao publicar imagens usando o código abaixo, a imagem "grande" fica sempre ruim, distorcida. Pesquisei na internet, usei system.drawing.imaging.encoderparameters e outras dicas mas nenhuma delas resolveu meu problema. Poderiam me ajudar?
Desde já, obrigado!
{ //----------------------------------------------------------------------------------------------------- // Salvar Foto //----------------------------------------------------------------------------------------------------- String path = pageScript.Server.MapPath(pasta); Boolean fileOk = false; if (imagem.HasFile) { // Bloqueia a transferência de arquivos maior que 3 MB if (imagem.PostedFile.ContentLength < 3145728) { // Verifico se é uma extensão de imagem válida String fileExtension; fileExtension = System.IO.Path.GetExtension(imagem.FileName).ToLower(); String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" }; for (int i = 0; i < allowedExtensions.Length; i++) { if (fileExtension == allowedExtensions[i]) { fileOk = true; } } if (fileOk) { try { Bitmap upBitmap = Bitmap.FromStream(imagem.PostedFile.InputStream) as Bitmap; System.Drawing.Image.GetThumbnailImageAbort msgCallback; msgCallback = new System.Drawing.Image.GetThumbnailImageAbort(thumbmailCallback); // Redimensiono a imagem grande System.Drawing.Image imgFoto; if (upBitmap.Height > upBitmap.Width) { imgFoto = upBitmap.GetThumbnailImage(480, 640, msgCallback, IntPtr.Zero); } else { imgFoto = upBitmap.GetThumbnailImage(640, 480, msgCallback, IntPtr.Zero); } // Renomeio a imagem grande String nomeFoto = DateTime.Now.ToString(); nomeFoto = nomeFoto.Replace("/", "").Replace(" ", "").Replace(":", ""); // Salvo a imagem grande imgFoto.Save(path + nomeFoto + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); oFoto.ImgFoto = pasta + nomeFoto + ".jpg"; //imgFoto.Save(path + imagem.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); //oFoto.ImgFoto = pasta + imagem.FileName; // Redimensiono a imagem pequena System.Drawing.Image thumbnail; if (upBitmap.Height > upBitmap.Width) { thumbnail = upBitmap.GetThumbnailImage(149, 204, msgCallback, IntPtr.Zero); } else { thumbnail = upBitmap.GetThumbnailImage(204, 149, msgCallback, IntPtr.Zero); } // Salvo a imagem pequena thumbnail.Save(path + "thumb_" + nomeFoto + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); oFoto.Thumb = pasta + "thumb_" + nomeFoto + ".jpg"; //thumbnail.Save(path + "thumb_" + imagem.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); //oFoto.Thumb = pasta + "thumb_" + imagem.FileName; upBitmap.Dispose(); thumbnail.Dispose(); return oFoto; } catch (Exception ex) { // Mensagem informativa exibeMensagem.show(pageScript, "Erro: " + ex.Message + ", favor contactar o suporte!"); return oFoto; } } else // if (fileOk) { // Mensagem informativa exibeMensagem.show(pageScript, "Só poderá carregar imagens neste campo."); return oFoto; } } else // if (fuMapa.PostedFile.ContentLength < 1048576) { // Mensagem informativa exibeMensagem.show(pageScript, "Limite máximo para a imagem é de 1MB."); return oFoto; } } }
Respostas
-
wc,
Acredito que você esteja perdendo qualidade devido a forma que esta fazendo esse redimensionamento
neste link http://pedrofernandes.net/2012/01/21/como-redimensionar-imagens-em-c/
você vai ver uma forma de fazer isso sem perder (ou perder pouca) qualidade na imagem
Bruno Viegas D. Ribeiro
Analista Desenvolvedor de Sistemas www.brunoviegas.com.br- Marcado como Resposta wcsantos terça-feira, 16 de outubro de 2012 17:56
Todas as Respostas
-
Olá wcsantos,
me parece que ao diminuir uma imagem e deixa-la como thumb perde-se qualidade mesmo,
minha dica é deixar os thumbs em outra pasta e quando for exibir as miniaturas vc direciona a essa pasta
e quando for exibir as imagens de tamanho grande vc direciona para a pasta de imagens grandes.
Pode ser que ao direcionar para a imagem grande, esteja pegando a imagem thumb, por isso está perdendo
a qualidade, está exibindo uma imagem de tamanho muito menor em um quadro grande.
Espero ter ajudado !!!
se ajudou, não se esqueça de marcar como resposta.
Eduardo Narimatsu.
- Sugerido como Resposta MarceloSchneider quarta-feira, 22 de agosto de 2012 11:57
- Não Sugerido como Resposta wcsantos quarta-feira, 22 de agosto de 2012 11:59
-
Olá wcsantos,
me parece que ao diminuir uma imagem e deixa-la como thumb perde-se qualidade mesmo,
minha dica é deixar os thumbs em outra pasta e quando for exibir as miniaturas vc direciona a essa pasta
e quando for exibir as imagens de tamanho grande vc direciona para a pasta de imagens grandes.
Pode ser que ao direcionar para a imagem grande, esteja pegando a imagem thumb, por isso está perdendo
a qualidade, está exibindo uma imagem de tamanho muito menor em um quadro grande.
Espero ter ajudado !!!
se ajudou, não se esqueça de marcar como resposta.
Eduardo Narimatsu.
Olá,
Acho que não entendeu, vamos lá...
O código gera 2 imagens, uma thumb e uma normal. Ambas ficam do tamanho definido no código, PORÉM a maior fica distorcida, perde qualidade, NÃO tamanho.
Se eu salvo a "original" sem redimensionar ela fica perfeita, MESMO gerando o thumb depois.
NÃO estou pegando a thumb no lugar da maior.
O problema está aqui:
Bitmap upBitmap = Bitmap.FromStream(imagem.PostedFile.InputStream) as Bitmap; System.Drawing.Image.GetThumbnailImageAbort msgCallback; msgCallback = new System.Drawing.Image.GetThumbnailImageAbort(thumbmailCallback); // Redimensiono a imagem grande System.Drawing.Image imgFoto; if (upBitmap.Height > upBitmap.Width) { imgFoto = upBitmap.GetThumbnailImage(480, 640, msgCallback, IntPtr.Zero); } else { imgFoto = upBitmap.GetThumbnailImage(640, 480, msgCallback, IntPtr.Zero); }
Provavelmente na hora de redimensionar, o "componente" está diminuindo a qualidade da imagem.
Temporariamente resolvi não redimensionando a imagem publicada e apenas gerando o thumb, PORÉM não é o ideal. O ideal seria ter TODAS as imagens publicadas com o mesmo tamanho.
-
-
wc,
Acredito que você esteja perdendo qualidade devido a forma que esta fazendo esse redimensionamento
neste link http://pedrofernandes.net/2012/01/21/como-redimensionar-imagens-em-c/
você vai ver uma forma de fazer isso sem perder (ou perder pouca) qualidade na imagem
Bruno Viegas D. Ribeiro
Analista Desenvolvedor de Sistemas www.brunoviegas.com.br- Marcado como Resposta wcsantos terça-feira, 16 de outubro de 2012 17:56
-
wc,
Acredito que você esteja perdendo qualidade devido a forma que esta fazendo esse redimensionamento
neste link http://pedrofernandes.net/2012/01/21/como-redimensionar-imagens-em-c/
você vai ver uma forma de fazer isso sem perder (ou perder pouca) qualidade na imagem
Bruno Viegas D. Ribeiro
Analista Desenvolvedor de Sistemas www.brunoviegas.com.brApesar do código do link estar errado, depois do acerto funcionou.
Obrigado!
-
Eu trabalhei um bom tempo com imagens, a melhor forma de redimensionar imagens que eu consegui até hoje foi esta.
http://secretsmind.blogspot.com.br/2009/05/salvando-imagens-em-alta-qualidade.html
Ela deixa em uma qualidade super boa, e ainda fica super pequena em tamanho(KB). Atente-se ao codec para salvar a imagem, também é muito importante.