Ir para o conteúdo

Class para redimensionar imagens em c#


Criado por raviel28, Set 17 2010 22:38

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 raviel28

raviel28
  • raviel28
  • Colaborador
  • 22 Revisões

Revisou 17 setembro 2010 - 22:38

Um código bem interessante criado pelo usuário do Lab Design do Fórum iMasters.

O método upload talvez nao seja tão importante mas o resize com certeza é.

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.Web.UI.WebControls;

namespace webAdmin
{

/// <summary>
/// Faz o upload e sobrepõe se ja existir caso a flagh override eseja true
/// </summary>
public class Images {


public Boolean upLoad(FormView _formView, string _control, string _path, Boolean _override) {

String pathImage = HttpContext.Current.Server.MapPath(_path);

FileUpload _upload = (FileUpload)_formView.FindControl(_control);

String path = pathImage + _upload.FileName;

if(_upload.HasFile)
{
if (!File.Exists(path) || _override) {
// To enable this sample, grant Write permission to the ASP.NET process account
// for the Images subdirectory and uncomment below lines of code.
try {
_upload.SaveAs(path);
return true;
}
catch {
return false;
}
}
}
return false;
}





/// <summary>
/// Redimensiona imagem
/// scrPath = path da imagem original
/// destPath = path para a nova imagem
/// caso o destPath seja igual ao scrPath, a nova imagem substitui a anterior
/// </summary>

public static void Resize(string srcPath, string destPath, int nWidth, int nHeight) {

string temp;
// abre arquivo original
System.Drawing.Image img = System.Drawing.Image.FromFile(srcPath);
int oWidth = img.Width; // largura original
int oHeight = img.Height; // altura original

// redimensiona se necessario
if(oWidth > nWidth || oHeight > nHeight)
{

if(oWidth > oHeight)
{
// imagem horizontal
nHeight = (oHeight * nWidth) / oWidth;
}
else
{
// imagem vertical
nWidth = (oWidth * nHeight) / oHeight;
}
}

// cria a copia da imagem
System.Drawing.Image imgThumb = img.GetThumbnailImage(nWidth, nHeight, null, new System.IntPtr(0));

if(srcPath == destPath)
{
temp = destPath + ".tmp";
imgThumb.Save(temp, ImageFormat.Jpeg);
img.Dispose();
imgThumb.Dispose();
File.Delete(srcPath); // deleta arquivo original
File.Copy(temp, srcPath); // copia a nova imagem
File.Delete(temp); // deleta temporário
}
else
{
imgThumb.Save(destPath, ImageFormat.Jpeg); // salva nova imagem no destino
imgThumb.Dispose(); // libera memoria
img.Dispose(); // libera memória
}
}
}
}

Exemplo de chamada.
1) Esse arquivo Imagem.cs deve ficar na pasta App_Code do projeto ou se preferir, compilar e colocar a dll na pasta bin.

// faz upload dos arquivos de imagens
// este metodo está code-behind de uma pagina e gerenciamento de arquivos (upload e exclusão)

// o manipulador do form chama esse metodo passando o controle com o arquivo uploaded, qual a pasta para ser gravada e se pode sobrepor
//caso já tenha uma cópia na pasta com o mesmo nome.
// o metodo verifica se existe um arquivo no controle
// verifica se o tipo de arquivo é valido e se for, grava na pasta.
// Eu tenho uma pasta no provedor chamada thumbs e caso no metodo o nome da pasta seja a de thumbs
// é chamado o class para redimensionar a imagem neste caso, width máximo 100px e height máximo 100px
// o class verifica o formato da imagem, se horizontal ou vertical
// por exemplo se a imagem for horizontal, o width será 100px e o height proporcional
// se a imagem for vertical, o heigth assume 100px e o width proporcional porém não ultrapassando o limite de 100px.

public void upLoadImages(FileUpload upLoadFile, string path, Boolean flash) {
// arquivos imagens do html
if (upLoadFile.HasFile) {
string tipo = upLoadFile.PostedFile.ContentType;
if (tipo == "image/pjpeg" || tipo== "image/gif" || tipo=="image/x-png") {
upLoadFile.SaveAs(path + upLoadFile.FileName);
if (path==thumbsDir) {
//cria thumb DataBind imagem enviada
webAdmin.Images.Resize(path + upLoadFile.FileName, path + upLoadFile.FileName, 100, 100);
}
}
else if (flash && tipo=="application/x-shockwave-flash")
upLoadFile.SaveAs(upLoadFile.FileName);
else
upLoadError.Text = "Arquivo Inválido. Somente arquivos de imagens são permitidos!";
}
}





1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)