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
sentitevi liberi di commentarecodice:<%@ 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>
sto cercando di imparare![]()


Rispondi quotando
)
