Ver Mensaje Individual
  #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