Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/08/2007, 10:11
gabriel em
 
Fecha de Ingreso: diciembre-2004
Mensajes: 139
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: preview de imagenes

Si puedes habilitar soporte para asp.net en tu servidor te recomiendo un codigo que yo uso, no tienes que saber .net. Lo que haces es simplemente un link en tu pagina pasandole ciertos querys y hace el rezise en el acto y lo muestra.

Esto es util ya que hay muchos previews que lo unico que hacen es mostrar la imagen mas chica, pero pesa lo mismo que la imagen sin achicar y entonces si tienes muchos previews en una pagina tarda mucho en cargar.

El codigo lo llamas en cualquier pagina asi:

Código:
<img src="thumbnail.aspx?ForceAspect=False&Width=200&Height=200&Image=Pepe.jpg">
Y en la misma carpeta copias el archivo thumbnail.aspx que es asi:

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{ 
			//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); //use this line for lower resolution thumbnails
		outputImage.SetResolution(72, 72); 
					
		//outputImage.InterpolationMode = InterpolationMode.HighQualityBicubic;
		System.Drawing.Imaging.ImageFormat outputFormat = (System.Drawing.Imaging.ImageFormat)imageOutputFormatsTable[origBitmap.RawFormat.Guid];
		
		outputImage.Save(Response.OutputStream, outputFormat);
		outputImage.Dispose();
		origBitmap.Dispose();
	}
	catch (Exception ex){
		//log error so we may know the problem. you need to have write permits, of course on log path			
		System.IO.StreamWriter sw=null;
		try{
			sw=new System.IO.StreamWriter(Server.MapPath("error.txt"),true);
			sw.WriteLine("Error : " + ex.Message + " processing " + Request.QueryString["Image"]);
		}	 
		catch{}		
		finally{sw.Close();}
		//now display the error image
		Response.Redirect("thumberror.gif");
	}
}
</script>
Un comentario importante: no respeta las transparencias de los gif o png, la verdad no se como solucionar esto ya que no se .net , pero si alguien puede nos vendria barbaro a todos.