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