Webly: Classe Upload com redimensionamento de imagem - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de .NET.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.


Página 1 de 1

Classe Upload com redimensionamento de imagem Avaliar tópico: -----

#1 Membro offline   Ricardo M Machado Ícone

  • Ícone
  • Grupo: Membro Amigo
  • Posts: 293
  • Cadastrado: 12-julho 06
  • Localização:Porto Velho / RO

Postou 25 outubro 2006 - 09:37

Classe criada baseada no código:
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. :thumbsup:
[img]http://www.mesaberta.com.br/mcts.png[/img]

contato: [email="ricardo_machado@hotmail.com"]ricardo_machado@hotmail.com[/email]
0

Página 1 de 1


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)