http://rufan-redi.bl...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
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
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
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
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.

Entrar
Cadastre-se
Ajuda
Responder

Quote