Classe criada baseada no código:
http://rufan-redi.blogspot.com/2005/09/upl...ith-aspnet.html
Blog
Name:Rufan-Redi
Location:Gold Coast, Queensland, Australia
Editado, correção da mudança de qualidade da imagem. Comentei as linhas que estavam fazendo com que a imagem perdesse qualidade.
Classe VB.Net
CODE
Imports Microsoft.VisualBasic
Imports System.Drawing
Imports System.Drawing.Image
Public Class clsUpload
Shared StatusUP As Boolean ' Status do upload
Public Function Salvar(ByVal pImagem As HttpPostedFile, ByVal pDiretorio As String, ByVal pWidth As Integer, ByVal pHeight As Integer, ByVal pTamanho As Integer, Optional ByVal pOriginal As Boolean = False) As String
Dim ImgOriginal As String = "original_" ' Prefixo para salvar a foto original
Dim ImgNova As String = "prefixo_" ' Prefixo para salvar a foto redimensionada
Dim Img ' Variavel temporaria que calcula o novo tamanho
Dim Width, Height As Integer
Dim Extensao As String
Dim ImagemOriginal As Bitmap
Dim ImagemFinal As Image
Dim FormatoFinal As Imaging.ImageFormat = Imaging.ImageFormat.Jpeg
If pImagem.ContentLength > pTamanho * 1024 Then
Return "1|Sua imagem maior que o permitido."
Else
Try
ImagemOriginal = System.Drawing.Image.FromStream(pImagem.InputStream)
' Calculo para manter imagem em proporo
If (ImagemOriginal.Width / pWidth) > (ImagemOriginal.Width / pHeight) Then
Img = ImagemOriginal.Width
Width = pWidth
Height = ImagemOriginal.Height * (pWidth / Img)
If Height > pHeight Then
Width = Width * (pHeight / Height)
Height = pHeight
End If
Else
Img = ImagemOriginal.Height
Height = pHeight
Width = ImagemOriginal.Width * (pHeight / Img)
If Width > pWidth Then
Height = Height * (pWidth / Width)
Width = pWidth
End If
End If
' Objeto ImagemFinal recebe ImagemOriginal
ImagemFinal = New Bitmap(ImagemOriginal)
'Redimensiona o tamanho da imagem
ImagemFinal = ImagemFinal.GetThumbnailImage(Width, Height, Nothing, System.IntPtr.Zero)
' Criao do objeto
'Dim Grafico As Graphics = Graphics.FromImage(ImagemFinal)
' Transformar Fundo de GIFs transparente em Branco
'Dim sb = New SolidBrush(System.Drawing.Color.White)
'Grafico.FillRectangle(sb, 0, 0, ImagemFinal.Width, ImagemFinal.Height)
'Recriar a imagem com Height e Width denfinido
'Grafico.DrawImage(ImagemOriginal, 0, 0, ImagemFinal.Width, ImagemFinal.Height)
Try
Extensao = System.IO.Path.GetExtension(pImagem.FileName).ToLower()
'Definindo nomes para as imagens
Dim NomeOriginal As String = ImgOriginal & Date.Today.Day & Date.Today.Month & Date.Today.Year & Now.Hour & "-" & Now.Minute & "-" & Now.Second & "-" & Now.Millisecond & Extensao
Dim NomeRedimensionada As String = ImgNova & Date.Today.Day & Date.Today.Month & Date.Today.Year & Now.Hour & "-" & Now.Minute & "-" & Now.Second & "-" & Now.Millisecond & Extensao
' Salvando Imagem Original
If pOriginal = True Then ImagemOriginal.Save(pDiretorio & NomeOriginal, FormatoFinal)
' Salvando Imagem Redimensionada
ImagemFinal.Save(pDiretorio & NomeRedimensionada, FormatoFinal)
'Retornar Mensagem e Nomes dos arquivos
Return "0|Arquivo salvo!|" & NomeOriginal & "|" & NomeRedimensionada
Catch ex As Exception
Return "2|" & ex.ToString
End Try
' Liberando memria
If Not ImagemFinal Is Nothing Then
ImagemFinal.Dispose()
ImagemFinal = Nothing
End If
Catch
Return "1|Erro no processamento da imagem."
End Try
End If
' Liberando Memria
If Not ImagemOriginal Is Nothing Then
ImagemOriginal.Dispose()
ImagemOriginal = Nothing
End If
End Function
End Class
Classe C#.Net
CODE
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
/// <summary>
/// Summary description for clsUpload
/// </summary>
public class clsUpload
{
public clsUpload()
{
//
// TODO: Add constructor logic here
//
}
public string Salvar(HttpPostedFile pImagem, string pDiretorio, int pWidth, int pHeight, int pTamanho)
{
string ImgOriginal = "original_";
string ImgNova = "prefixo_";
object Img;
// Variavel temporaria que calcula o novo tamanho
int Width;
int Height;
string Extensao;
System.Drawing.Image ImagemOriginal;
Randomize();
StatusUP = false;
pImagem = pImagem;
// Recupera a imagem do parametro
if ((pImagem.ContentLength
> (pTamanho * 1024)))
{
return "1|Sua imagem maior que o permitido.";
}
else
{
try
{
ImagemOriginal = System.Drawing.Image.FromStream(pImagem.InputStream);
// Calculo para manter imagem em proporo
if (((ImagemOriginal.Width / pWidth)
> (ImagemOriginal.Width / pHeight)))
{
Img = ImagemOriginal.Width;
Width = pWidth;
Height = (ImagemOriginal.Height
* (pWidth / Img));
if ((Height > pHeight))
{
Width = (Width
* (pHeight / Height));
Height = pHeight;
}
}
else
{
Img = ImagemOriginal.Height;
Height = pHeight;
Width = (ImagemOriginal.Width
* (pHeight / Img));
if ((Width > pWidth))
{
Height = (Height
* (pWidth / Width));
Width = pWidth;
}
}
Bitmap ImagemFinal = new Bitmap(Width, Height);
// Criao do objeto
Graphics Grafico = Graphics.FromImage(ImagemFinal);
// Transformar Fundo de GIFs transparente em Branco
object sb = new SolidBrush(System.Drawing.Color.White);
Grafico.FillRectangle(sb, 0, 0, ImagemFinal.Width, ImagemFinal.Height);
// Recriar a imagem com Height e Width denfinido
Grafico.DrawImage(ImagemOriginal, 0, 0, ImagemFinal.Width, ImagemFinal.Height);
try
{
Extensao = System.IO.Path.GetExtension(pImagem.FileName).ToLower();
// Definindo nomes para as imagens
string NomeOriginal;
(Today.Year
+ (Now.Hour
+ (Now.Minute
+ (Now.Second + Extensao))));
string NomeRedimensionada;
(Today.Year
+ (Now.Hour
+ (Now.Minute
+ (Now.Second + Extensao))));
// Salvando Imagem Original
ImagemOriginal.Save((pDiretorio + NomeOriginal), ImagemOriginal.RawFormat);
// Salvando Imagem Redimensionada
ImagemFinal.Save((pDiretorio + NomeRedimensionada), ImagemOriginal.RawFormat);
StatusUP = true;
return ("0|Arquivo salvo!|"
+ (NomeOriginal + ("|" + NomeRedimensionada)));
}
catch (Exception ex)
{
return ("1|" + ex.ToString);
}
// Liberando memria
if (!(ImagemFinal == null))
{
ImagemFinal.Dispose();
ImagemFinal = null;
}
}
catch (System.Exception Return)
{
"1|Erro no processamento da imagem.";
}
}
// Liberando Memria
if (!(ImagemOriginal == null))
{
ImagemOriginal.Dispose();
ImagemOriginal = null;
}
}
}
Como utilizar a classe:
A classe sempre retorna uma string, separada pelo caracter |, desta forma podemos ver se aconteceu um erro ou sucesso. Quando acontece um erro o valor, "1|" é passado no início da string.
VB.net
CODE
Public Sub Upload(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGravar.Click
Dim upload As New clsUpload
Dim Mensagem As Array
Dim Retorno As String = upload.Salvar(Request.Files(0), "D:\Inetpub\tekla\wwwroot\upload\", 80, 60, 100)
Mensagem = Retorno.Split("|")
If Mensagem(0) = "0" Then
Response.Write("<script type='text/javascript'>alert('" & Mensagem(1) & "'); window.opener.document.all.ctl00_Conteudo_txtImagem.value ='" & Mensagem(3) & "';</script>")
Else
Response.Write("<script type='text/javascript'>alert('" & Mensagem(1) & "'); history.back();</script>")
End If
End Sub
C#.Net
CODE
public void Upload(object sender, System.EventArgs e) {
clsUpload upload = new clsUpload();
Array Mensagem;
string Retorno = upload.Salvar(Request.Files(0), "D:\\Inetpub\\tekla\\wwwroot\\upload\\", 80, 60, 100);
Mensagem = Retorno.Split("|");
if ((Mensagem[0] == "0")) {
Response.Write(("<script type=\'text/javascript\'>alert(\'"
+ (Mensagem[1] + ("\'); window.opener.document.all.ctl00_Conteudo_txtImagem.value =\'"
+ (Mensagem[3] + "\';</script>")))));
}
else {
Response.Write(("<script type=\'text/javascript\'>alert(\'"
+ (Mensagem[1] + "\'); history.back();</script>")));
}
}
[color="blue"][/color][color="#808080"][/color]
Mais um código,
Até a próxima.