Usuário com melhor resposta
resize automático de imagens com c#.net

Pergunta
-
Bom dia,
estou precisando fazer uma galeria de fotos, já peguei alguns exemplos até prontos, porém oq eu gostaria de fazer era enviar uma foto por ftp e por código c#.net ele automaticamente pega a imagem 1024x768 por exemplo e clona ela com 50x50 e outra em 640x480.. igual sites de fotos mesmo, para que uma possa ser a thumbnail e a outra a imagem do lado (maior).. e sendo que sempre as 3 ultimas fotos enviadas vou deixar na página principal do site, as imagens 50x50 por exemplo...
alguem já fez isto em c#?
Grato.
Respostas
-
Code Snippet
//Define variáveis
System.Drawing.Image imagem;
System.Drawing.Image thumb;
//Recupera a imagem original
imagem = System.Drawing.Image.FromFile("CAMINHO_ARQUIVO");
//Aqui é feita a renderização proporcional da altura da imagem
//tomando por base que o largura final dela é de 50px;
int width = 50;
int height;
height = (int)(width * imagem.Height) / imagem.Width;
//Gera a nova imagem reduzida
thumb = imagem.GetThumbnailImage(width, height, null, System.IntPtr.Zero);
//Salva a imagem
thumb.Save("CAMINHO_THUMB");
OBS 1: Se vc pegar uma imagem 1024x768 e redimensionar para 50x50 ela irá ficar "deformada", pois a proporção não está adequada. Vc está transformando um retângulo em um quadrado. O código acima previne esse tipo de problema. Fica a seu critério!
OBS 2: O CAMINHO (tanto para leitura como gravação) deve ser informado completo: Unidade + diretórios + nome do arquivo.
Exemplo: C:\Inetpub\wwwroot\MeuSite\Imagens\NomeImagem.jpg
Espero ter ajudado!
Todas as Respostas
-
Code Snippet
//Define variáveis
System.Drawing.Image imagem;
System.Drawing.Image thumb;
//Recupera a imagem original
imagem = System.Drawing.Image.FromFile("CAMINHO_ARQUIVO");
//Aqui é feita a renderização proporcional da altura da imagem
//tomando por base que o largura final dela é de 50px;
int width = 50;
int height;
height = (int)(width * imagem.Height) / imagem.Width;
//Gera a nova imagem reduzida
thumb = imagem.GetThumbnailImage(width, height, null, System.IntPtr.Zero);
//Salva a imagem
thumb.Save("CAMINHO_THUMB");
OBS 1: Se vc pegar uma imagem 1024x768 e redimensionar para 50x50 ela irá ficar "deformada", pois a proporção não está adequada. Vc está transformando um retângulo em um quadrado. O código acima previne esse tipo de problema. Fica a seu critério!
OBS 2: O CAMINHO (tanto para leitura como gravação) deve ser informado completo: Unidade + diretórios + nome do arquivo.
Exemplo: C:\Inetpub\wwwroot\MeuSite\Imagens\NomeImagem.jpg
Espero ter ajudado! -
Danilo, obrigado pela resposta...
bom, testei aqui seu código e lembro de ter feito algo assim na faculdade com c++ mas não sabia se dava certo... porém quando tentei utilizar este código passando o caminho exato da imagem e até colocando na raiz c: também, deu este erro:
Exception Details: System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
o que pode ser?
Grato
-
-
OK!
Lembre-se sempre de usar o caminho físico completo.
Quando colocar o WebSite em servidor de terceiro (algum WebHosting), procure saber o caminho físico da pasta onde ficará o seu site.
Sugiro configurar isso no Web.config, assim poderá alterar o caminho entre desenvolvimento e produção sem ter que recompilar a aplicação. Facilita também na manutenção, caso haja mudanças de pastas e coisas similares.