Pagina 1 di 9 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 87

Discussione: Consigli su miniature

  1. #1

    Consigli su miniature

    Ciao, sto realizzando una griglia di immagini le quali, dopo esser state cliccate, fanno sì che a fianco della griglia compaia l'immagine più in grande.
    Ho dovuto svolgere l'upload in PHP, la griglia in Dhtml, ma per le miniature ho dovuto usare il binomio Asp/Asp.Net.
    Funziona tutto, ma ho solo un problema.

    Le miniature della griglia hanno una buona qualità (ho letto che il metodo usato ha problemi con width maggiori di 100) ma l'immagine a fianco (con width=300) è molto sgranata.
    Premettendo che non credo di poter installare applicazioni di terze parti sul dominio (è un dominio a pagamento normale), c'è un modo per creare una thumbnail da 300 px di larghezza con una bassa quality loss?
    Dover usare direttamente l'immagine uploadata e dire al cliente 'non inserire le tue foto 640x480' ma 'riducile con Photoshop a 300' è proprio la soluzione che vorrei evitare.. il cliente come la maggior parte è un incapace. :rollo:

    Ho usato questo codice 'famoso':
    codice:
    <%@ Import Namespace="System.Drawing"%>
    <%@ Import Namespace="System.Drawing.Imaging"%>
    <SCRIPT RUNAT="SERVER">
    Sub Page_Load()
    ' Initialize objects
    Dim objImage, objThumbnail As System.Drawing.Image
    Dim strServerPath, strFilename As String
    Dim shtWidth, shtHeight As Short
    ' Get image folder path on server - use "\" string if root
    strServerPath = Server.MapPath("/pp/images/")
    ' Retrieve name of file to resize from query string
    strFilename = strServerPath & Request.QueryString("filename")
    ' Retrieve file, or error.gif if not available
    Try
        objImage = objImage.FromFile(strFilename)
    Catch
        objImage = objImage.FromFile(strServerPath & "error.gif")
    End Try
    ' Retrieve width from query string
    If Request.QueryString("width") = Nothing Then
        shtWidth = objImage.Width
    ElseIf Request.QueryString("width") < 1 Then
        shtWidth = 100
    Else
        shtWidth = Request.QueryString("width")
    End If
    ' Work out a proportionate height from width
    shtHeight = objImage.Height / (objImage.Width / shtWidth)
    ' Create thumbnail
    objThumbnail = objImage.GetThumbnailImage(shtWidth, _
      shtHeight, Nothing, System.IntPtr.Zero)
    ' Send down to client
    Response.ContentType = "image/jpeg"
    objThumbnail.Save(Response.OutputStream, Imaging.ImageFormat.Jpeg)
    ' Tidy up
    objImage.Dispose()
    objThumbnail.Dispose()
    
    End Sub
    
    </SCRIPT>
    Grazie per i vostri punti di vista, saluti!

  2. #2
    Prova questo (opportunamente modificalo per le tue esigenze)

    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 = "./";
    
    double orgImgWidth = 0.0;
    double orgImgHeight = 0.0;
    double rThumbnailWidth = 0.0;
    double rThumbnailHeight = 0.0;
    
    System.Drawing.Image orgImage;
    
      if (Request.QueryString["w"] != "") ThumbnailWidth = Convert.ToInt32(Request.QueryString["w"]);
      if (Request.QueryString["h"] != "") ThumbnailHeight = Convert.ToInt32(Request.QueryString["h"]);
    
    if (Request.QueryString["src"] != "")
    {
    strFileName = Convert.ToString(Request.QueryString["src"]);
    
    if (Request.QueryString["percorso"] != "") destinazione = Convert.ToString(Server.MapPath(Request.QueryString["percorso"]));
    else 
     destinazione = Convert.ToString(Server.MapPath(destinazione));
    
    if (strFileName != "")
    {
      try
       {
    	  orgImage = System.Drawing.Image.FromFile(Server.MapPath(strFileName));
    		using(Bitmap tmpImage = new Bitmap(orgImage))
    		 {
    		  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.
    			  if (tmpImage.Width != tmpImage.Height)
    		   {
    				// Altrimenti continuiamo a fare i nostri controlli per calcolarne le 
    				// giuste dimensioni e quindi creare la nostra nuova immagine con
    				// l'aspectratio corretto.
    			if (tmpImage.Width > tmpImage.Height)
    			 {
    			  // L > H => tH = (H * tL)/ L
    			  rThumbnailWidth = ThumbnailWidth;
    			  rThumbnailHeight = (double)((tmpImage.Height * ThumbnailWidth) / tmpImage.Width);
    			 } // if (tmpImage.Width > tmpImage.Height)
    		    else
    			 {
    			  if (tmpImage.Width < tmpImage.Height)
    			   {
    			    // L < H => tL = (L * tH)/ H
    			    rThumbnailHeight = ThumbnailWidth;
    			    rThumbnailWidth = (double)((tmpImage.Width * ThumbnailHeight) / tmpImage.Height);
    			   } // if (tmpImage.Width < tmpImage.Height)
    			 } // else
    		   } // if (tmpImage.Width != tmpImage.Height)
    		 } // using(Bitmap tmpImage = new Bitmap(orgImage))
    
    	   using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    		{
    			 Response.ContentType = orgImage.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 ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight)) 
    		  { 
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		   bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat);
    		  } // if ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight))
    		 else // L'immagine rientra già nella dimensione da noi decisa quindi non serve creargli il Thumbnail.
    		  {
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		  } // else
             Response.Flush();
    		} // using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
       } // try
      catch (Exception ex)
       {
    	Response.Write(ex.Message);
       } // catch (Exception ex)
      finally
       {
        Response.Write("\nRe-Coded by R.B. Riddick");
       }
     } // if (strFileName != "")
    } // if (Request.QueryString["src"] != "")
    }
    </script>
    codice:
    <%@ Page Language="C#" Debug="true" %>
     <%@ import Namespace="System"%>
    <html>
     <body>
     
      </br>Originale (2272px X 1704px): </br>
      [img]DSCN0644.jpg[/img]</br>
      
      </br>Ridimensionata (800px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=800&h=150[/img]
      </br>Ridimensionata (400px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=400&h=150[/img]
      </br>Ridimensionata (300px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=300&h=150[/img]
      </br>Ridimensionata (100px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=100&h=150[/img]
      
      </br>Originale (190px X 224px): </br>
      [img]mappa_to_pic_a.gif[/img]</br>
      </br>Ridimensionata (185px X 100px)</br>
      [img]img.aspx?src=mappa_to_pic_a.gif&w=&h=[/img]</br>
      </br>Ridimensionata (100px X 100px)</br>
      [img]img.aspx?src=mappa_to_pic_a.gif&w=&h=[/img]</br>
    </body>
    </html>
    http://deepabyss.org/test/test.aspx
    Richard B. Riddick : "Non avrete mica paura del buio?"

    Scusatemi ma sono mesi che non pago piu' la bolletta della luce....

  3. #3
    Grazie Vin, perfetto.
    PS: la pagina di output può anche essere un file html semplice

  4. #4
    E' 'na domanda quella nel PS o cosa?

    Comunque se vedi bene lo script :

    - legge e crea il thumbnail di un'immagine sul server
    - poi la visualizza (il thumbnail)

    Se per output intendi la pagina di prova "test.aspx"
    con solo codice html così:
    test.aspx
    codice:
    <html>
     <body>
     
      </br>Originale (2272px X 1704px): </br>
      [img]DSCN0644.jpg[/img]</br>
      
      </br>Ridimensionata (800px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=800&h=150[/img]
      </br>Ridimensionata (400px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=400&h=150[/img]
      </br>Ridimensionata (300px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=300&h=150[/img]
      </br>Ridimensionata (100px X 150px)</br>
      [img]img.aspx?src=DSCN0644.jpg&w=100&h=150[/img]
      
      </br>Originale (190px X 224px): </br>
      [img]mappa_to_pic_a.gif[/img]</br>
      </br>Ridimensionata (185px X 100px)</br>
      [img]img.aspx?src=mappa_to_pic_a.gif&w=&h=[/img]</br>
      </br>Ridimensionata (100px X 100px)</br>
      [img]img.aspx?src=mappa_to_pic_a.gif&w=&h=[/img]</br>
    </body>
    </html>
    Sì funziona però non dimenticare di mettere l'estensione
    ".ASPX" altrimenti il codice al suo interno non funziona.

    TN (TN = thumbnail)

    Se invece intendevi che, al posto della visualizzazione
    del TN, venga generato codice html relativo ai path del
    nuovo TN creato allorar devi inserire del codice opportuno
    al posto di quello di visualizzazione.
    Vedi righe in rosso.

    codice:
    	 if ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight)) 
    		  { 
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		   bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat);
    		  } // if ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight))
    		 else // L'immagine rientra già nella dimensione da noi decisa quindi non serve creargli il Thumbnail.
    		  {
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		  } // else
    PS : Se hai problemi, quando posso, sono qui... ciao!

    Richard B. Riddick : "Non avrete mica paura del buio?"

    Scusatemi ma sono mesi che non pago piu' la bolletta della luce....

  5. #5
    No, intendevo semplicemente che funziona anche come test.html.
    Prova e vedrai
    Anche perchè non contiene elementi di questo linguaggio ma solo link, per cui non c'è effettivamente bisogno.

    Ma lo script che mi hai dato nel tuo primo post genera delle TN reali in qualche cartella? Perchè io non le trovo sul server.. e a dir la verità mi andrebbero bene anche TN on the fly, visto che sono 9 a pagina

    Grazie e a presto

  6. #6
    Originariamente inviato da spirit6
    No, intendevo semplicemente che funziona anche come test.html.
    Prova e vedrai
    Anche perchè non contiene elementi di questo linguaggio ma solo link, per cui non c'è effettivamente bisogno.

    Ma lo script che mi hai dato nel tuo primo post genera delle TN reali in qualche cartella? Perchè io non le trovo sul server.. e a dir la verità mi andrebbero bene anche TN on the fly, visto che sono 9 a pagina

    Grazie e a presto
    html -> Meglio no? ;D

    Salva TN reali nella cartella Public
    (che deve avere i permessi di lettura e scrittura)

    codice:
    bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat);
    Ti consiglio di usare lo script solo per generarli la prima
    volta poi non richiamarlo più, è inutile perchè i precedenti
    verranno sovrascritti e poi non sarebbe performante la
    pagina web interessata.

    Richard B. Riddick : "Non avrete mica paura del buio?"

    Scusatemi ma sono mesi che non pago piu' la bolletta della luce....

  7. #7
    Te lo chiedo perchè non ho una cartella public nella directory di prova dove ho provato lo script, però funziona tutto.

    Prima ipotesi:Quindi, al posto di modificare lo script per creare TN on the fly, dovrebbe bastare non usare una cartella public.. che dici?

    Seconda ipotesi: in realtà ti sbagli e non vengono create TN, per lo meno non tutte. Questo potrebbe essere confermato dal contenuto della cartella public sul tuo server: vedo solo 2 immagini, dove sono tutte le TN per le varie prove che hai fatto?
    Quella del rettile è la prima TN della pagina test, quella della mappa non serve a niente.. VVoVe:
    Cerchiamo di risolvere questi dubbi.

    Altra cosa: chmod a 755 va bene dal lato permessi e dal lato sicurezza?

  8. #8
    Originariamente inviato da spirit6
    Te lo chiedo perchè non ho una cartella public nella directory di prova dove ho provato lo script, però funziona tutto.

    Prima ipotesi:Quindi, al posto di modificare lo script per creare TN on the fly, dovrebbe bastare non usare una cartella public.. che dici?

    Seconda ipotesi: in realtà ti sbagli e non vengono create TN, per lo meno non tutte. Questo potrebbe essere confermato dal contenuto della cartella public sul tuo server: vedo solo 2 immagini, dove sono tutte le TN per le varie prove che hai fatto?
    Quella del rettile è la prima TN della pagina test, quella della mappa non serve a niente.. VVoVe:
    Cerchiamo di risolvere questi dubbi.

    Altra cosa: chmod a 755 va bene dal lato permessi e dal lato sicurezza?
    1)
    Public è solo un nome puoi chiamarla come vuoi
    io originariamente la chiamai thumbs poi qualcuno la
    rinominò a suo piacimento.

    2)
    Come dicevo le precedenti vengono sovrascritte...
    non sono stato a cambiare il nome per ogni TN quindi
    le immagini TN nella cartella del server per un file
    con lo stesso identico nome è e rimane una sola,
    creata e visualizzata una sola volta e successivamente
    sovrascritta dalla successiva...
    Chiaro Ora?
    PS : il rettile è una piccola iguana di soli 21cm

    3) ora non ricordo bene i comandi linux per gli attributi
    delle cartelle/files quindi non posso aiutarti in questo...
    se vuoi proprio usarlo per TN On the Fly basta che commenti
    la riga seguente (quella rossa):

    codice:
    using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    		{
    			 Response.ContentType = orgImage.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 ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight)) 
    		  { 
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
     //		   bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat); 
    		  } // if ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight))
    		 else // L'immagine rientra già nella dimensione da noi decisa quindi non serve creargli il Thumbnail.
    		  {
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		  } // else
             Response.Flush();
    		} // using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    ok?

    Richard B. Riddick : "Non avrete mica paura del buio?"

    Scusatemi ma sono mesi che non pago piu' la bolletta della luce....

  9. #9
    Quello che intendevo è che non riesco a creare le TN in una cartella sul server, per cui anche senza commentare quella riga mi vanno sempre On the fly :master:
    Effettivamente senza TN la pagina è un po' troppo lenta, quindi sarei interessato a risolvere questo problemino.

    Ecco nel dettaglio:
    *Sono su un server aruba a base windows.
    *Sto provando lo script sul percorso dominio.it/prova/
    *L'unica cartella con i permessi di scrittura è dominio.it/public/

    Ho provato senza successo a cambiare:
    codice:
    bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat);
    con:
    codice:
    bitmap.Save(destinazione + "/../public/" + strFileName, orgImage.RawFormat);
    bitmap.Save(destinazione + "../public/" + strFileName, orgImage.RawFormat);
    bitmap.Save("/public/" + strFileName, orgImage.RawFormat);
    bitmap.Save("public/" + strFileName, orgImage.RawFormat);
    Ma non riesco proprio. Mi dai una mano a trovare il percorso giusto? Grazie!

  10. #10
    Originariamente inviato da spirit6
    Quello che intendevo è che non riesco a creare le TN in una cartella sul server, per cui anche senza commentare quella riga mi vanno sempre On the fly :master:
    Effettivamente senza TN la pagina è un po' troppo lenta, quindi sarei interessato a risolvere questo problemino.

    Ecco nel dettaglio:
    *Sono su un server aruba a base windows.
    *Sto provando lo script sul percorso dominio.it/prova/
    *L'unica cartella con i permessi di scrittura è dominio.it/public/

    Ho provato senza successo a cambiare:
    codice:
    bitmap.Save(destinazione + "/public/" + strFileName, orgImage.RawFormat);
    con:
    codice:
    bitmap.Save(destinazione + "/../public/" + strFileName, orgImage.RawFormat);
    bitmap.Save(destinazione + "../public/" + strFileName, orgImage.RawFormat);
    bitmap.Save("/public/" + strFileName, orgImage.RawFormat);
    bitmap.Save("public/" + strFileName, orgImage.RawFormat);
    Ma non riesco proprio. Mi dai una mano a trovare il percorso giusto? Grazie!
    Prova con questo...
    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("/public/");
     
     double orgImgWidth = 0.0;
     double orgImgHeight = 0.0;
     double rThumbnailWidth = 0.0;
     double rThumbnailHeight = 0.0;
     
     System.Drawing.Image orgImage;
     
     if (Request.QueryString["w"] != "") ThumbnailWidth = Convert.ToInt32(Request.QueryString["w"]);
     if (Request.QueryString["h"] != "") ThumbnailHeight = Convert.ToInt32(Request.QueryString["h"]);
     
     if (Request.QueryString["src"] != "")
      {
       strFileName = Convert.ToString(Request.QueryString["src"]);
       
       if (strFileName != "")
    	{
    	 try
    	  {
    	   orgImage = System.Drawing.Image.FromFile(Server.MapPath(strFileName));
    	   using(Bitmap tmpImage = new Bitmap(orgImage))
    		{
    		 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.
    		 if (tmpImage.Width != tmpImage.Height)
    		  {
    		   // Altrimenti continuiamo a fare i nostri controlli per calcolarne le 
    		   // giuste dimensioni e quindi creare la nostra nuova immagine con
    		   // l'aspectratio corretto.
    		   if (tmpImage.Width > tmpImage.Height)
    			{
    			 // L > H => tH = (H * tL)/ L
    			 rThumbnailWidth = ThumbnailWidth;
    			 rThumbnailHeight = (double)((tmpImage.Height * ThumbnailWidth) / tmpImage.Width);
    			} // if (tmpImage.Width > tmpImage.Height)
    		   else
    			{
    			 if (tmpImage.Width < tmpImage.Height)
    			  {
    			   // L < H => tL = (L * tH)/ H
    			   rThumbnailHeight = ThumbnailWidth;
    			   rThumbnailWidth = (double)((tmpImage.Width * ThumbnailHeight) / tmpImage.Height);
    			  } // if (tmpImage.Width < tmpImage.Height)
    			} // else
    		  } // if (tmpImage.Width != tmpImage.Height)
    		} // using(Bitmap tmpImage = new Bitmap(orgImage))
    
    	   using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    		{
    		 Response.ContentType = orgImage.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 ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight)) 
    		  { 
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    		   bitmap.Save((destinazione + strFileName), orgImage.RawFormat);
    		  } // if ((orgImage.Width > ThumbnailWidth) || (orgImage.Height > ThumbnailHeight))
    		 else // L'immagine rientra già nella dimensione da noi decisa quindi non serve creargli il Thumbnail.
    		  {
    		   bitmap.Save(Response.OutputStream, orgImage.RawFormat);
    //         Se vuoi che l'immagine venga comunque salvata nella cartella dei Thumbnails leva "//" dalla riga sottostante.
    //		   bitmap.Save(destinazione + strFileName, orgImage.RawFormat);
    		  } // else
             Response.Flush();
    		} // using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    	  } // try
         catch (Exception ex)
          {
    	   Response.Write(ex.Message);
          } // catch (Exception ex)
         finally
          {
           Response.Write("\nRe-Coded by R.B. Riddick");
          }
    	} // if (strFileName != "")
      } // if (Request.QueryString["src"] != "")
    }
    </script>
    Fammi sapere...
    Richard B. Riddick : "Non avrete mica paura del buio?"

    Scusatemi ma sono mesi che non pago piu' la bolletta della luce....

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.