so che più e più volte hanno fatto questa domanda, ma ho fatto moltissime prove e non sono riuscito nel mio intento.

ho il famosissimo script per il ridimensionamento delle immagini, poi ho trovato l'altro famosissimo script per ritagliare le immagini ed ho provato ad integrare le funzioni del ritaglio tra le funzioni del ridimensionamento.

...e non funziona.

sarei molto contanto se mi aiutaste...
Codice PHP:
<%@ Page Language="C#"  Debug="true"%>
<%@ 
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 senderEventArgs e) {
    
    
// parametri
    
string fileName = (Request.QueryString["img"]==null)?"":"/public/"+Request.QueryString["img"]; // 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)?0: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>) {
        try {
        
            
//carica l'immagine e ne recupera le dimensioni
            
System.Drawing.Image image;
            
image System.Drawing.Image.FromFileServer.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 >= && scaleFactor 100 ) {
                
//l'immagine è da ridimensionare: calcola le dimensioni della miniatura
                
if ( scaleFactor == 0) {
                    if ( 
requestedWidth == && requestedHeight != 0) {
                        
// forzata requestedHeight
                        
thumbWidth Convert.ToInt32(Math.Ceiling(requestedHeight*originalWidth/originalHeight));
                        
thumbHeight Convert.ToInt32(requestedHeight);
                    } else if (
requestedHeight == && requestedWidth != 0) {
                        
// forzata requestedWidth
                        
thumbWidth Convert.ToInt32(requestedWidth);
                        
thumbHeight Convert.ToInt32(Math.Ceiling(requestedWidth*originalHeight/originalWidth));
                    } else if (
requestedHeight != && 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.FromFileServer.MapPath(errorImagePath+"wbresize_err"+error+".gif") );
    
Response.ContentType "image/gif";
    
errImage.Save(Response.OutputStreamSystem.Drawing.Imaging.ImageFormat.Gif);
    
errImage.Dispose();
    
errImage null;
}

//
//
//queste sono le funzioni che servono per il ritaglio(almno penso)
//
//
public void ImgClip(ref Bitmap bmpSourceRectangle clip)
    {
        
Bitmap bmp = new Bitmap(clip.Widthclip.HeightbmpSource.PixelFormat);
        
bmp.SetResolution(bmpSource.HorizontalResolutionbmpSource.VerticalResolution);
        
bmp.Tag bmpSource.Tag;
        
Graphics gr Graphics.FromImage(bmp);
        
gr.Clear(Color.White);
        
        
//'imposto lavoro alta qualità
        
gr.InterpolationMode System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        
gr.SmoothingMode System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        
gr.PixelOffsetMode System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        
gr.CompositingQuality System.Drawing.Drawing2D.CompositingQuality.HighQuality;


        
gr.DrawImage(bmpSource, new Rectangle(00clip.Widthclip.Height), clipGraphicsUnit.Pixel);
        
gr.Dispose();
        
bmpSource.Dispose();
        
bmpSource bmp;
    
    }
public 
void ImgClipCentra(ref Bitmap bmpRectangle clipint contenitoreWint contenitoreHColor coloreSottofondo)
    {
        
//taglio l'immagine
        
ImgClip(ref bmpclip);

        
//creo il riquadro bianco
        
Bitmap bmp1 = new Bitmap(contenitoreWcontenitoreHbmp.PixelFormat);
        
bmp1.SetResolution(bmp.HorizontalResolutionbmp.VerticalResolution);
        
bmp1.Tag bmp.Tag;
        
Graphics gr Graphics.FromImage(bmp1);
        
gr.Clear(coloreSottofondo);

        
//imposto lavoro alta qualità
        
gr.InterpolationMode System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        
gr.SmoothingMode System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        
gr.PixelOffsetMode System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        
gr.CompositingQuality System.Drawing.Drawing2D.CompositingQuality.HighQuality;

        
gr.DrawImage(bmp, new Rectangle((int)((contenitoreW bmp.Width) / 2), (int)((contenitoreH bmp.Height) / 2), bmp.Widthbmp.Height), new Rectangle(00bmp.Widthbmp.Height), GraphicsUnit.Pixel);

        
bmp.Dispose();
        
gr.Dispose();
        
bmp bmp1;
    
    }      

    public 
void ImgClipCentra(ref Bitmap bmpRectangle clipint contenitoreWint contenitoreH)
    {
        
ImgClipCentra(ref bmpclipcontenitoreWcontenitoreHColor.White);
    }

//
//
//fine delle funzioni che ho copiato
//
//

private void Resize(string FileNameint requestedWidthint requestedHeightstring NewFileNameint 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 <= 0compression 100;
    
    
//se indicato lo ridimensiono
    
if (requestedWidth == || requestedHeight == 0image=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(encodercompression);
    
encoderParameters.Param[0] = encoderParameter;
    if (
NewFileName == "") {
        
// output su file
        
image.Save(NewFileNamejpegCodecInfoencoderParameters);
    } else {
        
// output diretto
        
Response.ContentType "image/jpeg";
        
//
        //
        //QUI PROVO A RITAGLIARE, MA NON FUNZIONA!!! LO SCRIPT VA IN ERRORE...
        //
        //
        
ImgClipCentra(fileName, New Rectangle(50100280180));
        
image.Save(Response.OutputStreamjpegCodecInfoencoderParameters);
    }
    
    
image.Dispose();
    
image null;
    
    
file.Close();

}

private 
ImageCodecInfo GetEncoderInfo(string mimeType) {
   
ImageCodecInfo[] encoders ImageCodecInfo.GetImageEncoders();
   for (
int j 0jencoders.Lengthj++) {
      if (
encoders[j].MimeType == mimeType) {
           return 
encoders[j];
      }
   }
   return 
null;
}
</script> 
attendo con ansia...