O c??digo que irei mostrar nem precisarei de muita explica????o. Voc?? encontra a rodo a?? pela internet… Contudo, esse tem um pequeno diferencial: misturei o c??digo “pescado” da net com o incremento de Glenn Jones. O redimensionamento consiste em colocar no SRC da imagem o Generic Handler que faz todo o processo e gera a imagem. Ou seja, crie um arquivo ImageResize.ashx e coloque o seguinte c??digo abaixo:
using System;
using System.Drawing;
using System.IO;
using System.Web;
public class ImagemHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
// Recupera os par??metros passados pela p??gina
string strSrcImagemOriginal = “../upload/” + context.Request[“img”].ToString();
string strAlturaImagemRedimensionar = “”;
string strLarguraImagemRedimensionar = context.Request[“w”].ToString();
// Cria temporariamnte a imagem
System.Drawing.Image imagemTemp = System.Drawing.Image.FromFile(context.Server.MapPath(strSrcImagemOriginal));
// Vari??veis contendo o tamanho
int srcWidth = imagemTemp.Width;
int srcHeight = imagemTemp.Height;
int thumbHeight;
int thumbWidth;
// Redimensiona a largura de forma proporcional
if (context.Request[“w”] != null)
{
thumbWidth = int.Parse(strLarguraImagemRedimensionar);
thumbHeight = (int)(thumbWidth * imagemTemp.Height) / imagemTemp.Width;
}
else
{
thumbWidth = imagemTemp.Width;
thumbHeight = imagemTemp.Height;
}
// Redimensiona a altura
if (context.Request[“h”] != null)
{
strAlturaImagemRedimensionar = context.Request[“h”].ToString();
thumbHeight = int.Parse(strAlturaImagemRedimensionar);
// Faz o rateio para o redimensionamento proporcional
// Assim a altura e a largura nunca ir??o ultrapassar o tamanho limite
double widthRatio = (double)imagemTemp.Width / (double)thumbWidth;
double heightRatio = (double)imagemTemp.Height / (double)thumbHeight;
double ratio = Math.Max(widthRatio, heightRatio);
thumbWidth = (int)(imagemTemp.Width / ratio);
thumbHeight = (int)(imagemTemp.Height / ratio);
}
imagemTemp.Dispose();
// Envia para a mem??ria o objeto a ser trabalhado bem como o novo objeto
Stream objStream = new StreamReader(context.Server.MapPath(strSrcImagemOriginal)).BaseStream;
BinaryReader objBinaryReader = new BinaryReader(objStream);
int i = (int)objStream.Length;
byte[] arrBytes = objBinaryReader.ReadBytes(i);
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(arrBytes);
System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream);
System.Drawing.Image thumbnail = new Bitmap(thumbWidth, thumbHeight);
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail);
// Melhoria da nova imagem
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
// Desenha a nova imagem
graphic.DrawImage(image, 0, 0, thumbWidth, thumbHeight);
// Aplica a codifica????o necess??ria
System.Drawing.Imaging.ImageCodecInfo[] info = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.EncoderParameters encoderParameters;
encoderParameters = new System.Drawing.Imaging.EncoderParameters(1);
encoderParameters.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
// Exibe a imagem em forma de JPG
context.Response.ContentType = “image/jpeg”;
thumbnail.Save(context.Response.OutputStream, info[1], encoderParameters);
}
}
Mais dado do que isso ?? s?? de m??o beijada!
4 respostas em “Redimensionar imagens com alta qualidade em ASP.NET”
100 % !! Funfou legal com qualidade excelente.
Funcionou certinho, valeu!
melhor q batat so ovo de gar??a
Excelente blog Thiago, parabens, tenho uma d??vida nesse c??digo, Como eu usu??rio isso no meu bot??o UpLoad, obrigado. Paulo R.