Foros del Web » Programación para mayores de 30 ;) » .NET »

Redimensionar una imagen y grabarla en el disco

Estas en el tema de Redimensionar una imagen y grabarla en el disco en el foro de .NET en Foros del Web. Hola amigos, la verdad no se si esta pregunta está bien aki o sería mejor ponerla en tecnologias.net pero aki va: Vereis tengo una página ...
  #1 (permalink)  
Antiguo 22/02/2005, 09:11
perrogrun
Invitado
 
Mensajes: n/a
Puntos:
Redimensionar una imagen y grabarla en el disco

Hola amigos, la verdad no se si esta pregunta está bien aki o sería mejor ponerla en tecnologias.net pero aki va:

Vereis tengo una página escrita en asp.net (en c#) que lo que hace es redimensionar una imagen y mostrarla redicuda, al estilo thumbnail, pero lo que quiero hacer realmente es que esa imagen redimensionada la guarde en el disco.

Esta es la página, por cierto funciona fantásticamente:

Código:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" %>
<script language="C#" runat="server">


void Page_Load(Object sender, EventArgs e)
{

	try{
		Response.Cache.VaryByParams["Image;Width;Height;ForceAspect"] = true;
		Response.ContentType = "image/jpeg";
		System.Collections.Hashtable imageOutputFormatsTable = new System.Collections.Hashtable();
		imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Gif.Guid, System.Drawing.Imaging.ImageFormat.Gif);
		imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Jpeg.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
		imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Bmp.Guid, System.Drawing.Imaging.ImageFormat.Gif);
		imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Tiff.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
		imageOutputFormatsTable.Add(System.Drawing.Imaging.ImageFormat.Png.Guid, System.Drawing.Imaging.ImageFormat.Jpeg);
	
		string imageLocation;
		bool forceaspect = true;
		int newHeight;
		int newWidth;
		int reqHeight = 100;
		int reqWidth = 100;
		int origHeight;
		int origWidth;
		
		imageLocation = Server.MapPath(Request.QueryString["Image"]);
		if (Request.QueryString["Height"] != null){
			reqHeight = Convert.ToInt32(Request.QueryString["Height"]);
		}
		if (Request.QueryString["ForceAspect"] != null){
			forceaspect = Convert.ToBoolean(Request.QueryString["ForceAspect"]);
		}
		if(Request.QueryString["Width"] != null){
			reqWidth = Convert.ToInt32(Request.QueryString["Width"]);
		}
		if (Request.QueryString["ForceAspect"] == "true"){
			forceaspect = true;
		}
		
		System.Drawing.Bitmap origBitmap = new System.Drawing.Bitmap(imageLocation);
		origHeight = origBitmap.Height;
		origWidth = origBitmap.Width;
		
		if (forceaspect){
			//Force Aspect Change
			newHeight = reqHeight;
			newWidth = reqWidth;
		}		
		else if (origBitmap.Height >= origBitmap.Width){
			//Portrait
			newHeight = reqHeight;
			newWidth = (int)(((double)origBitmap.Width / (double)origBitmap.Height) * reqHeight);
		}
		else{ 
			//Landscape
			newWidth = reqWidth;
			newHeight = (int)(((double)origBitmap.Height / (double)origBitmap.Width) * reqWidth);
		}		
		
		System.Drawing.Bitmap outputImage = new System.Drawing.Bitmap(origBitmap, newWidth, newHeight);
		outputImage.SetResolution(24, 24);		
	
		//outputImage.InterpolationMode = InterpolationMode.HighQualityBicubic;
		System.Drawing.Imaging.ImageFormat outputFormat = (System.Drawing.Imaging.ImageFormat)imageOutputFormatsTable[origBitmap.RawFormat.Guid];
		//outputImage.Save(Server.MapPath("./prueba.jpg"), outputFormat);
		outputImage.Save(Response.OutputStream, outputFormat);
		outputImage.Dispose();
		origBitmap.Dispose();
		
	}
	catch{
		Response.Redirect("thumberror.gif");
	}
}
</script>
La cuestión es que la imagen que muestra la guarde en el disco.
Gracias a todos
  #2 (permalink)  
Antiguo 22/02/2005, 09:36
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 1 mes
Puntos: 535
Movido desde ASP
__________________
...___...
  #3 (permalink)  
Antiguo 22/02/2005, 10:01
perrogrun
Invitado
 
Mensajes: n/a
Puntos:
Me respondo a mi mismo, aki está la solución

Código:
<script language="VB" runat="server" Debug="true">

  Sub Page_Load(Sender As Object, E As EventArgs)
	
        Dim originalimg, thumb As System.Drawing.Image
        Dim FileName As String
        Dim inp As New IntPtr()
        Dim width, height As Integer
        Dim rootpath As String

        rootpath = Server.MapPath("/") ' Get Root Application Folder

        FileName = Server.MapPath(Request.QueryString("FileName")) ' Root Folder + FileName
        Try
            originalimg = originalimg.FromFile(FileName) ' Fetch User Filename
        Catch
            originalimg = originalimg.FromFile(rootpath & "error.gif") ' Fetch error.gif
        End Try

        ' Get width using QueryString.
        If Request.QueryString("width") = Nothing Then
            width = originalimg.Width  ' Use original Width. 
        ElseIf Request.QueryString("width") = 0 Then  ' Assign default width of 100.
            width = 100
        Else
            width = Request.QueryString("width") ' Use User Specified width.
        End If

        ' Get height using QueryString.
        If Request.QueryString("height") = Nothing Then
            height = originalimg.Height ' Use original Height.
        ElseIf Request.QueryString("height") = 0 Then ' Assign default height of 100.
            height = 100
        Else
            height = Request.QueryString("height") ' Use User Specified height.
        End If

        thumb = originalimg.GetThumbnailImage(width, height, Nothing, inp)

        ' Sending Response JPEG type to the browser. 
       Response.ContentType = "image/jpeg"
	   Dim NombreArchivo as String
		NombreArchivo = "thumb_" & right(FileName,len(FileName) - instrrev(FileName,"\"))
		Dim imagenpequena as String
		imagenpequena = Server.MapPath("/") & "..\imagenes\pruebas\" & NombreArchivo
	   	thumb.Save(imagenpequena, System.Drawing.Imaging.ImageFormat.Jpeg) 'Change jpeg word 
		
        ' Disposing the objects.
        originalimg.Dispose()
        thumb.Dispose()

  End Sub
</script>
Espero que os sirva, por cierto para que no os de error el usuario asp.net tiene que tener permisos de escritura.

Saludos
  #4 (permalink)  
Antiguo 23/07/2006, 15:15
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 2 meses
Puntos: 4
alguien sabe como reducir la imagen pero proporcionalmente? osea que yo le de solo el ancho y el me la reduzca proporcinalmente? y ademas guardarla en disco?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #5 (permalink)  
Antiguo 06/11/2006, 19:15
 
Fecha de Ingreso: noviembre-2006
Mensajes: 2
Antigüedad: 18 años, 4 meses
Puntos: 0
De acuerdo Si señor

aquí está exactamente nose cómo adaptarlo pero aquí está la clase que hace dicha operación:

Pega esta dirección ya que como soy nuevo aún no puedo poner enlaces, pero como no estoy haciendo spam no creo que esté infringiendo las reglas

mig16.cep.la/post/crear-vista-previa-a-escala

Suerte! Espero le sirva a alguien más

  #6 (permalink)  
Antiguo 06/11/2006, 19:22
 
Fecha de Ingreso: noviembre-2006
Mensajes: 2
Antigüedad: 18 años, 4 meses
Puntos: 0
pega la dirección en tu navegador

mig16.cep.la/post/crear-vista-previa-a-escala


(ignorar)
Palabras clave para que nos encuentren en Google:
asp.net Thumbnails
miniaturas imágen en miniatura
vista previa
vista en miniatura
image preview
  #7 (permalink)  
Antiguo 07/11/2006, 10:24
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 23 años, 1 mes
Puntos: 50
date una vuelta en las faq´s, ahi hay un ejemplo.

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #8 (permalink)  
Antiguo 07/11/2006, 12:05
Avatar de Alex Reyes  
Fecha de Ingreso: diciembre-2005
Ubicación: Camarillo, CA
Mensajes: 242
Antigüedad: 19 años, 3 meses
Puntos: 2
Aqui esta una parte de codigo de un programa que hicé para redimensionar imagenes.

Factor va a ser 60%, 50%, 300% o lo que tu quieras. ffactor va a ser 0.6 para 60, 0.5 para 50 o 3 para 300.

h y w van a tener las nuevas dimensiones en la proporcion elegida.

Image currentImage = Image.FromFile("Path\\FileName.jpg");
float ffactor = (float)factor.Value / 100;

int h = (int)Math.Ceiling((double)currentImage.Height * ffactor);
int w = (int)Math.Ceiling((double)currentImage.Width * ffactor);

string[] fileNameArray = images[i].Split('\\');
string imageName = fileNameArray[fileNameArray.Length - 1];
Bitmap newImage = newBitmap(currentImage, newSize(w,h));
newImage.Save(destinationPath + imageName,
ImageFormat.Jpeg);

currentImage.Dispose();
newImage.Dispose();


Espero que te sirva la idea.
__________________
Alex Reyes
http://jalexreyes.spaces.live.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.