ecco qui lo script completo per il ridimensionamento (creazione thumbnails) con gestione della compressione

è un file unico da chiamare wbresize.aspx
le informazioni da passare in querystring le trovate spiegate in commento nelle prime righe

vi sono anche 3 file immagine di errore
trovate tutto nello zip qui
http://www.imente.it/wbresize0.2.zip

codice:
<%@ Page Language="C#" %>
<%@ import Namespace="System.IO" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<script runat="server">

/*  WBRESIZE 0.2 
	developer by imente 15/10/2006

parametri (da querystring):
	f = nome del file originale
	s = percentuale di ridimensionamento (es: 20)
	w = larghezza fissata (la altezza viene calcolata di conseguenza per mantenere le dimensioni)
	h = altezza fissata (la larghezza viene calcolata di conseguenza per mantenere le dimensioni)
	*** si può indicare S oppure W oppure H. se si indica S, W e H vengono ignorati.
	*** se si indica sia W che H viene forzato il ridimensionamento e non verranno rispettate le proporzioni
	
	c = compressione jpeg (valori da 1 a 100)
	*** se non impostata la compressione viene impostata a 75
	
	t = cartella dove salvare la thumb
	n = nome della thumb (se non indicato genera thumb.jpg)
	r = pagina a cui redirigersi dopo aver effettuato il resize (se non indicato si redirige alla thumb)
	*** se si indica T la thumb viene salvata
	*** se non si indica T la thumb viene solo visualizzata (on the fly)
*/

// path dove sono posizionate le immagini di errore
string errorImagePath = "";


void Page_Load(Object sender, EventArgs e) {
	
	// parametri
	string fileName = (Request.QueryString["f"]==null)?"":Request.QueryString["f"]; // nome del file originale
	string folder = (Request.QueryString["t"]==null)?"":Request.QueryString["t"]; // cartella dove salvare la thumb
	string newName = (Request.QueryString["n"]==null)?"thumb.jpg":Request.QueryString["n"]; // nuovo nome del file
	string redirect = (Request.QueryString["r"]==null)?(folder+"/"+newName):Request.QueryString["r"]; // redirezione dopo save
	double requestedWidth = (Request.QueryString["w"]==null)?0:Convert.ToDouble(Request.QueryString["w"]); // larghezza impostata
	double requestedHeight = (Request.QueryString["h"]==null)?0:Convert.ToDouble(Request.QueryString["h"]); // altezza impostata
	int scaleFactor = (Request.QueryString["s"]==null)?0:Convert.ToInt32(Request.QueryString["s"]); // fattore di scalo per la miniatura
	int compression = (Request.QueryString["c"]==null)?75:Convert.ToInt32(Request.QueryString["c"]); // compressione (0-100)
	
	// variabili di servizio
	int originalWidth = 0;
	int originalHeight = 0;
	int thumbWidth = 0;
	int thumbHeight = 0;
	
	if ( fileName.Trim().Length>0 ) {
		try {
		
			//carica l'immagine e ne recupera le dimensioni
			System.Drawing.Image image;
			image = System.Drawing.Image.FromFile( Server.MapPath(fileName) );
			originalWidth = image.Width;
			originalHeight = image.Height;
			image.Dispose();
			image = null;
			
			//se una dimensione è più grande dell'immagine e l'altra no, 
			//la diminuisce fino a renderla pari all'immagine
			if ( originalWidth > requestedWidth && originalHeight < requestedHeight ) requestedHeight = originalHeight; 
			if ( originalWidth < requestedWidth && originalHeight > requestedHeight ) requestedWidth = originalWidth;   
			
			if ( originalWidth >= requestedWidth && originalHeight >= requestedHeight && scaleFactor >= 0 && scaleFactor < 100 ) {
				//l'immagine è da ridimensionare: calcola le dimensioni della miniatura
				if ( scaleFactor == 0) {
					if ( requestedWidth == 0 && requestedHeight != 0) {
						// forzata requestedHeight
						thumbWidth = Convert.ToInt32(Math.Ceiling(requestedHeight*originalWidth/originalHeight));
						thumbHeight = Convert.ToInt32(requestedHeight);
					} else if (requestedHeight == 0 && requestedWidth != 0) {
						// forzata requestedWidth
						thumbWidth = Convert.ToInt32(requestedWidth);
						thumbHeight = Convert.ToInt32(Math.Ceiling(requestedWidth*originalHeight/originalWidth));
					} else if (requestedHeight != 0 && requestedWidth != 0) {
						// forzata sia requestedWidth che requestedHeight
						thumbWidth = Convert.ToInt32(requestedWidth);
						thumbHeight = Convert.ToInt32(requestedHeight);
					} else {
						// ERR: nessun parametro impostato
						error(0);
						return;
					}
				} else {
					// scalata: percentuale delle dimensioni
					thumbWidth = (originalWidth*scaleFactor/100);
					thumbHeight = (originalHeight*scaleFactor/100);
				}
			} else {
				// sovradimensionamento (si impostano le nuove dimensioni a 0 per evitare il ridimensionamento)
				thumbWidth = 0;
				thumbHeight = 0;
			}
			
			// esegue le operazioni di output
			if ( folder != "" ) {
				// output su file
				Resize(fileName,thumbWidth,thumbHeight,folder+"\\"+newName,compression);
				// redirezione
				Response.Redirect(redirect);
			} else {
				// output diretto (come content-type="image/jpeg")
				Resize(fileName,thumbWidth,thumbHeight,"",compression);
			}
			
		} catch (System.IO.FileNotFoundException ex) {
			// ERR: immagine inesistente
			error(2);
			return;
		} catch (Exception ex) {
			Response.Write(ex.Message);
		}
	} else {
		// ERR: nessuna immagine indicata
		error(1);
		return;
	}
}

private void error(int error) {
	// errore: visualizza una immagine di errore
	System.Drawing.Image errImage;
	errImage = System.Drawing.Image.FromFile( Server.MapPath(errorImagePath+"wbresize_err"+error+".gif") );
	Response.ContentType = "image/gif";
	errImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
	errImage.Dispose();
	errImage = null;
}

private void Resize(string FileName, int requestedWidth, int requestedHeight, string NewFileName, int compression) {

	FileStream file=new FileStream(Server.MapPath(FileName),FileMode.Open);
	NewFileName = Server.MapPath(NewFileName);

	//creo il bitmap dallo stream
	System.Drawing.Image bmpStream=System.Drawing.Image.FromStream(file);
	
	//creo un nuovo bitmap
	Bitmap image;
	
	//controllo valori in entrata
	if (compression <= 0) compression = 100;
	
	//se indicato lo ridimensiono
	if (requestedWidth == 0 || requestedHeight == 0) image=new Bitmap(bmpStream);
	else image=new Bitmap(bmpStream,new Size(requestedWidth,requestedHeight));
	
	ImageCodecInfo jpegCodecInfo;
	System.Drawing.Imaging.Encoder encoder;
	EncoderParameter encoderParameter;
	EncoderParameters encoderParameters;
	jpegCodecInfo = GetEncoderInfo("image/jpeg");
	encoder = System.Drawing.Imaging.Encoder.Quality;
	encoderParameters = new EncoderParameters(1);
	encoderParameter = new EncoderParameter(encoder, compression);
	encoderParameters.Param[0] = encoderParameter;
	if (NewFileName == "") {
		// output su file
		image.Save(NewFileName, jpegCodecInfo, encoderParameters);
	} else {
		// output diretto
		Response.ContentType = "image/jpeg";
		image.Save(Response.OutputStream, jpegCodecInfo, encoderParameters);
	}
	
	image.Dispose();
	image = null;
	
	file.Close();

}

private ImageCodecInfo GetEncoderInfo(string mimeType) {
   ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
   for (int j = 0; j< encoders.Length; j++) {
      if (encoders[j].MimeType == mimeType) {
           return encoders[j];
	  }
   }
   return null;
}
</script>
sentitevi liberi di commentare
sto cercando di imparare