Ciao a tutti!![]()
Per la creazione di thumb sul server, ho provato un codice di R.B. Riddick che funziona perfettamente, solo che produce delle miniature di qualità troppo bassa (per le mie esigenze).
Ho fatto una ricerca nel forum, ma non ho trovato niente che facesse al caso mio per modificare il codice in modo che le immagini venissero ridotte e salvate in qualità migliore.
Qualcuno ha qualche suggerimento?
Questo è il codice che sto usando.
codice:<%@ Page Language="C#" Debug="true" %> <%@ import Namespace="System"%> <%@ import Namespace="System.IO"%> <%@ import Namespace="System.Drawing" %> <%@ import Namespace="System.Drawing.Imaging" %> <%@ import Namespace="System.Text.RegularExpressions" %> <script Language="C#" runat="server"> void Page_Load(Object sender, EventArgs e) { int ThumbnailWidth = 64; int ThumbnailHeight = 64; string strFileName = ""; string destinazione = Server.MapPath("/images/thumbs/"); double orgImgWidth = 0.0; double orgImgHeight = 0.0; double rThumbnailWidth = 0.0; double rThumbnailHeight = 0.0; string strPerc = Server.MapPath("/images/temp/"); DirectoryInfo miaDir = null; miaDir = new DirectoryInfo(strPerc); DirectoryInfo[] subDirectories = miaDir.GetDirectories(); FileInfo[] listaFile = miaDir.GetFiles(); ThumbnailWidth = Convert.ToInt32(180); ThumbnailHeight = Convert.ToInt32(180); for (int i = 0; i < listaFile.Length; i++) { try { strFileName = listaFile[i].Name; String strFilePath = listaFile[i].FullName.ToString(); using(System.Drawing.Image tmpImage = System.Drawing.Image.FromFile((strFilePath))) { rThumbnailWidth = ThumbnailWidth; rThumbnailHeight = ThumbnailHeight; orgImgWidth = tmpImage.Width; orgImgHeight = tmpImage.Height; // Se l'immagine è più piccola del Thumbnail forziamo le dimensioni di // quest'ultimo alle dimensioni dell'immagine. if (orgImgWidth < ThumbnailWidth) ThumbnailWidth = tmpImage.Width; if (orgImgHeight < ThumbnailHeight) ThumbnailHeight = tmpImage.Height; // Se le dimensioni dell'immagine e del Thumbnail corrispondono non facciamo nulla. // quindi se l'immagine è quadrata... if (tmpImage.Width != tmpImage.Height) { // Se l'immagine non è quadrata // continuiamo a fare i nostri controlli per calcolarne le // giuste dimensioni e quindi creare la nostra nuova immagine con // l'aspectratio corretto. // Se l'immagine è più larga che alta if (tmpImage.Width > tmpImage.Height) { // L > H => L = tL // La larghezza del TN sarà quella da noi stabilita // quindi dobbiamo solo assegnarla. rThumbnailWidth = ThumbnailWidth; // L'altezza del TN invece dovrà essere ricalcolata // in proporzione alla larghezza dell'immagine originale. // L > H => tH = (H * tL)/ L rThumbnailHeight = (double)((tmpImage.Height * ThumbnailWidth) / tmpImage.Width); } // if (tmpImage.Width > tmpImage.Height) else { // Altrimenti se l'immagine è più alta if (tmpImage.Width < tmpImage.Height) { // L < H => H = tH // L'altezza del TN sarà quella da noi stabilita // quindi dobbiamo solo assegnarla. rThumbnailHeight = ThumbnailHeight; // La larghezza del TN invece dovrà essere ricalcolata // in proporzione alla altezza dell'immagine originale. // L < H => tL = (L * tH)/ H rThumbnailWidth = (double)((tmpImage.Width * ThumbnailHeight) / tmpImage.Height); } // if (tmpImage.Width < tmpImage.Height) } // else } // if (tmpImage.Width != tmpImage.Height) using(Bitmap bitmap = new Bitmap(tmpImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight))) { // Response.ContentType = tmpImage.RawFormat.ToString(); //Response.Clear(); // Response.BufferOutput = true; //Response.AddHeader("Content-Disposition", "filename=" + strFileName); // In questo caso viene creata e salvata la Thumbnail dell'immagine in /thumbs/ if ((tmpImage.Width > ThumbnailWidth) || (tmpImage.Height > ThumbnailHeight)) { //bitmap.Save(Response.OutputStream, tmpImage.RawFormat); bitmap.Save((destinazione + strFileName), tmpImage.RawFormat); } // if ((tmpImage.Width > ThumbnailWidth) || (tmpImage.Height > ThumbnailHeight)) else // L'immagine rientra già nella dimensione da noi decisa quindi non serve creargli il Thumbnail. { //bitmap.Save(Response.OutputStream, tmpImage.RawFormat); // Se vuoi che l'immagine venga comunque salvata nella cartella dei Thumbnails leva "//" dalla riga sottostante. bitmap.Save(destinazione + strFileName, tmpImage.RawFormat); } // else //Response.Flush(); } // using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight))) } // using(System.Drawing.Image tmpImage = System.Drawing.Image.FromFile(Server.MapPath(strFileName))) } // try catch (Exception ex) { //Response.Write(ex.Message); } // catch (Exception ex) finally { //Response.Write("\nCoded by R.B. Riddick"); } } } </script>

Rispondi quotando