Redimensionando imagens com Dot Net

Com o uso das bibliotecas System.Drawing e System.Drawing.Imaging podemos redimensionar imagens há um tamanho bem menor sem praticar perder a qualidade.

Primeiro pegue uma imagem grande e de boa resolução, no meu caso vou usar uma imagem de 900×900 e vou redimensioná-la para os tamanhos 400×400, 250×2500, 120×120 e 48×48.

Criei um novo projeto do tipo Console Application no Visual Studio 2010, adicionei referência à biblioteca System.Drawing e no método Main adicionei o seguinte código:

List<string> enderecosDeImagens = new List<string>();

enderecosDeImagens = Imagem.ObterImagensNaoRedimensionadas();

List<Resolucao> resolucoes = new List<Resolucao>();

resolucoes.Add(Resolucao._400x400);
resolucoes.Add(Resolucao._250x250);
resolucoes.Add(Resolucao._120x120);
resolucoes.Add(Resolucao._48x48);

Imagem.RedimensionarArquivos(enderecosDeImagens, resolucoes);

Nesse código foi criada uma lista de string’s que conterá os endereços das imagens não redimensionadas, uma lista do tipo resolução, e depois passamos por paramêtro os endereços das imanges e as resoluções que queremos ter. Apreveite para criar o Enum Resolucao

public enum Resolucao
{
_48x48 = 48,
_120x120 = 120,
_250x250 = 250,
_400x400 = 400
}

Crie uma classe static chamada Imagem, adicione o método ObterImagensNaoRedimensionadas que retornorá uma lista de string, o método RedimensionarArquivos que será void, o método CriarPastas que será void, o método RedimensionarArquivo que será booleano, o método SalvarImagem que será void eo método ObterInformacaoDeCodificacao que retornará um ImageCodecInfo.

ObterImagensNaoRedimensionadas

List<string> imagensNaoRedimensionadas = new List<string>();

imagensNaoRedimensionadas = System.IO.Directory.GetFiles(@”D:\Artigos\Images\img\900×900″).ToList();

return imagensNaoRedimensionadas;

RedimensionarArquivos

CriarPastas(resolucoes);

Dictionary<string, bool> arquivosRedimensionados = new Dictionary<string, bool>();

foreach (string enderecoDoArquivo in enderecosDosArquivos)
{
foreach (Resolucao resolucao in resolucoes)
{
if (RedimensionarArquivo(enderecoDoArquivo, resolucao))
{
arquivosRedimensionados.Add(string.Format(“{0} – {1}”, enderecoDoArquivo, resolucao), true);
}
else
{
arquivosRedimensionados.Add(string.Format(“{0} – {1}”, enderecoDoArquivo, resolucao), true);
}
}
}

CriarPastas

foreach (Resolucao resolucao in resolucoes)
{
string pasta = string.Format(@”D:\Artigos\Images\img\{0}x{0}”, (int)resolucao);

if (System.IO.Directory.Exists(pasta) == false)
{
System.IO.Directory.CreateDirectory(pasta);
}
}

RedimensionarArquivo

bool resultado = true;

try
{
Bitmap imagemAtual = new System.Drawing.Bitmap(enderecoArquivo);

Bitmap ImagemRedimensionada = new System.Drawing.Bitmap((int)resolucao, (int)resolucao);

using (Graphics g = Graphics.FromImage((Image)ImagemRedimensionada))
{
g.DrawImage(imagemAtual, 0, 0, (int)resolucao, (int)resolucao);
}

System.IO.FileInfo fi = new System.IO.FileInfo(enderecoArquivo);

string destino = string.Format(@”D:\Artigos\Images\img\{0}x{0}\{1}”, (int)resolucao, fi.Name);

Imagem.SalvarImagem(destino, ImagemRedimensionada, 85L);
}
catch (Exception ex)
{
throw ex;
}

return resultado;

SalvarImagem

// Encoder parameter for image quality
EncoderParameter qualidade =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

// Jpeg image codec
ImageCodecInfo jpegCodec = ObterInformacaoDeCodificacao(“image/jpeg”);

if (jpegCodec == null)
return;

EncoderParameters parametrosDeCodificacao = new EncoderParameters(1);
parametrosDeCodificacao.Param[0] = qualidade;

img.Save(path, jpegCodec, parametrosDeCodificacao);

ObterInformacaoDeCodificacao

// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
{
if (codecs[i].MimeType == mimeType)
{
return codecs[i];
}
}

return null;

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s