Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764

    Thumb con immagini di buona qualità

    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>

  2. #2
    Per vedere come usare GDI in asp.net per migliorare la qualita' delle immagini ridimensionate leggi qui:
    Ridimensionare Immagini con VB.NET e GDI

    Trovi anche un collegamento ad una classe scritta da me che provvede a ridimensionare e salvare le immagini richiamando un metodo:
    Codice PHP:
    artObj.ResizeToFile(server.MapPath("/immagineOriginale.jpg"), _
           server
    .MapPath("/ImmagineRidimensionata.jpg"), _
           
    New Size(200200), _
           System
    .Drawing.Imaging.ImageFormat.JpegTrue80
    La spiegazione della classe la trovi qui Una Classe in .NET per la gestione delle immagini
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Grazie per la risposta.

    Il mio problema è quello che conosco ASP, ma praticamente niente di .NET e devo dire che ho preso lo script così com'era e l'ho usato.

    Darò sicuramente un'occhiata ai link che mi hai dato, ma temo che mi rifarò vivo in queste pagine con un'altra richiesta di supporto.

    Ciao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Simone, grazie per la risposta.

    Ho letto l'articolo nel tuo blog però, essendo a zero su .NET (lavoro in ASP e sto cercando di trovare il tempo di mettermi a studiare .NET), avrei bisogno di informazioni passo-passo per modificare lo script che sto usando.

    Comincio con le domande:
    1. Copio la dll nella cartella bin e poi come faccio a "dirgli che c'è la dll"?
    2. Come devo modificare il mio script per inserire quello che mi hai postato tu?
    3. Altre info utili che mi servono?

    Grazie ancora!

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Mi permetto di intervenire anch'io.

    Se conosci asp e on asp.net, forse ti conviene seguire un diverso approccio.
    Per prima cosa ti procuri una dll fatta in asp.net che faccia quello che chiedi.
    In seconda, crei una directory chiamat bin dentro il tuo progetto, e ci butti dentro la dll.
    La particolarità è che non devi registrarla; basta che stia là.
    In terza battuta ti fai delle paginette aspx semplici, che facciano da interfaccia. Dico paginette, perchè preferisco più pagine specializzate piuttosto che una difficile da maneggiare che faccia tutto.

    Solo per fare un esempio:

    1) puoi prendere la dll dal mio spazio web, per esempio:
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip

    2) ricorda che il sito deve essere configurato per il framework2

    3) dopo averla messa dentro la directory bin, usa la pagina img.aspx di interfaccia
    codice:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Collections.Generic" %>
    <%@ Import Namespace="System.Text" %>
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.Drawing.Text" %>
    <%@ Import Namespace="System.Drawing.Drawing2D" %>
    <%@ Import Namespace="System.Drawing.Imaging" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="j=gdi.img" %>
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            '---------------------------------------------------------------------------
            'Restituisce una immagine .jpg ridimensionata con lato max = p_width
            '
            'si debbono ricevere i seguenti parametri get
            '   p_img             : percorso dell'immagine
            '   p_width           : dimensione max immagine > 0, default = -1
            '---------------------------------------------------------------------------
            Dim p_img As String = Request.QueryString("p_img")
            Dim p_width As String = Request.QueryString("p_width")
    
            'messaggio in caso di errore
            Dim result As String = ""
            
            Try
                'leggo i parametri p_img e p_width
                p_img = Request.QueryString("p_img")
                p_width = Request.QueryString("p_width")
                
                
                'controllo che vengano ricevuti e che siano del tipo giusto
                If String.IsNullOrEmpty(p_img) Then result &= "p_img non valorizzato" & vbNewLine
                If String.IsNullOrEmpty(p_width) OrElse Integer.TryParse(p_width, Nothing) = False Then result &= "p_width non valorizzato o non numerico" & vbNewLine
    
                'se il messaggio è valorizzato visualizzo il messaggio di errore
                If result.Length > 0 Then Throw New Exception(result)
                 
                'se nessun errore visualizzo l'immagine ridimensionata                        
                j.ImgResizeAndSaveToResponseOutputStream(p_img, CInt(p_width))
                
            Catch ex As Exception
                Dim bmp As Bitmap = j.ImgFromText(ex.Message, Color.White, Brushes.Black, New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point))
                j.ImgSaveToResponseOutputStream(bmp)
    
            End Try
    
    
    
            
        End Sub
        
        
    </script>

    adesso, la tua pagina asp può usare le immagini ridimensionate e le richiamerai in questo modo
    codice:
    [img]img.aspx?p_img=http://static.panoramio.com/photos/original/216697.jpg&p_width=300[/img]
    come vedi, la pagina di interfaccia non fa altro che recuperare dalla QueryString le due variabili p_img, percorso dell'immagine, e p_width, la dimensione max


    se ti è servito ed è necessario aiuto, a disposizione
    Pietro

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Pietro, grazie per la risposta.

    Mi studierò con attenzione la soluzione da te proposta e poi ti farò sapere se ho risolto o se mi servono altre informazioni.

    Ciao!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Eccomi con le domande...

    1. Nello zip preso dal tuo sito, ci sono due dll. Devo caricarle entrambe?
    2. Riguardo al ridimensionamento dell'immagine. Che qualità ti dà? Con riferimento alle spiegazioni di Simone, viene usata un'interpolazione lineare o bicubica o cosa?

    Grazie.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Roby140569
    Eccomi con le domande...

    1. Nello zip preso dal tuo sito, ci sono due dll. Devo caricarle entrambe?
    2. Riguardo al ridimensionamento dell'immagine. Che qualità ti dà? Con riferimento alle spiegazioni di Simone, viene usata un'interpolazione lineare o bicubica o cosa?

    Grazie.
    Sono da mettere tutte e due le dll. Ricordati solo di andare con IIS nel tuo progetto e settare asp.net per il framework 2.

    In questo esempio, che è il più semplice, uso il ridimensionamento di qualità.

    ps. fai prima a provare
    Pietro

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    OK, allora carico i due file.
    C'è già il framework2.

    Adesso provo e poi ti faccio sapere, grazie!

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Roby140569
    OK, allora carico i due file.
    C'è già il framework2.

    Adesso provo e poi ti faccio sapere, grazie!

    noo. I progetti sono impostati per il framework 1 in maniera predefinita.
    Devi andare esplicitamente con IIS nel tuo progetto e impostare la 2
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.