Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Resize per immagine remota

    Ciao a tutti, utilizzo il seguente script trovato qui sul forum per fare il resize di immagini che risiedono sul mio stesso sito, ora avrei necessità di modificare lo script per il resize di immagini che stiano al di fuori del mio spazio web... E' possibile modificare lo script seguente?

    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 = 150;
     int ThumbnailHeight = 150;
     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.
    		 // 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 tmpImage = new Bitmap(orgImage))
    
    	   using(Bitmap bitmap = new Bitmap(orgImage, (int)(rThumbnailWidth), (int)(rThumbnailHeight)))
    		{
    		 Response.ContentType = orgImage.RawFormat.ToString();
    		 Response.Clear();
    		 Response.BufferOutput = true;
    //		 strFileName = DateTime.Now.ToString("dd.MM.yyyy.hh.mm.ss") + "-" + strFileName;
    		 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>

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: sono consapevole che la mia risposta non è quella che chiedi, ma forse, chissà

    allora, io utilizzo una dll, la recupero da qui
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip
    e la butto nella directory bin.

    Dopo di che, un esempio non banale è quello di sotto:

    leggo l'immagine da remoto
    la bordo di nero
    ci scrivo qualcosa
    la visualizzo

    vedi se ti può servire

    codice:
        Protected Sub LeggiImmagineDaRemoto(ByVal url As String)
            Dim bmp As Bitmap = Nothing
    
            Try
                bmp = img.ImgLoad(url, 5000) 'leggo immagine da remoto
                img.ImgResize(bmp, 800) 'ridimensiono a 800px
                img.ImgBorder(bmp, 14, Color.Black) 'la bordo di nero per 14 px
                Dim testo As String = "Nuraghe Santa Cristina, da GiovannaRosa"
    
                'ci scrivo del testo
                Dim f As New Font("arial", 12, FontStyle.Bold, GraphicsUnit.Pixel)
                Dim sf As SizeF = img.ImgGetSizeFromText(bmp, testo, f)
    
                img.ImgWriteText(bmp, testo, Brushes.Yellow, f, 0, CInt(bmp.Height - sf.Height))
                img.ImgSaveToResponseOutputStream(bmp) 'salvo nello stream di uscita
    
    
            Catch ex As Exception
                bmp = libreria.ImgFromText(ex.Message, Color.White, Brushes.Black, New Font("arial", 12))
                ImgSaveToResponseOutputStream(bmp)
    
            Finally
                If bmp IsNot Nothing Then bmp.Dispose()
            End Try
    
        End Sub
    Pietro

  3. #3
    il problema è che io devo fare il resize all'interno di un pagina ASP non asp.net e con lo script che avevo postato facevo così :

    [img]img.aspx?src=cam1.jpg&w=150&h=[/img]

    E mi mostrava l'immagine ridimensionata nella pagina ASP


    Con il tuo è fattibile così?

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da emilio81
    il problema è che io devo fare il resize all'interno di un pagina ASP non asp.net e con lo script che avevo postato facevo così :

    [img]img.aspx?src=cam1.jpg&w=150&h=[/img]

    E mi mostrava l'immagine ridimensionata nella pagina ASP


    Con il tuo è fattibile così?
    :master: Per utilizzare asp, se non sbaglio, bisogna creare una pagina intermedia aspx, in basic o c#. Qui bisogna scrivere un codice minimale che almeno legga i parametri querystring ricevuti. Si può fare certamente ma... :master: almeno un minimo di basic o c# bisogna pure masticarlo. Perciò, dato che una immagine, in asp o aspx si richiama allo stesso modo:

    [img]pagina.aspx?immagine=xxx&dimensione=yyy[/img]

    se vuoi aiuto, devi dire che parametri devi spedire e cosa vuoi ottenere.

    Tieni presente comunque, che io sono contrario ad una pagina aspx intermediaria che faccia tutto (che riceva una infinità di parametri), ma sono per tante pagine intermedie specializzate.

    In mattinata dovrei essere libero: se vuoi si continua, altrimenti ciao ciao
    Pietro

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    allora, questa è una pagina html che visualizza due immagini, una letta da locale e una da remoto.
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Pagina senza titolo</title>
        <link href="../../stili/Styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <h3>immagini lette da locale e da remoto</h3>
        [img]img.aspx?p_img=C:\dati\ProveNikon\DSCN0010.png&p_width=400[/img]
        
    
        [img]img.aspx?p_img=http://static.panoramio.com/photos/original/216697.jpg&p_width=400[/img]
    </body>
    </html>
    questa è invece la pagina aspx di interfaccia che fa il lavoro
    codice:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Drawing" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="j=gdi.img" %>
    
    <script runat="server">
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            '---------------------------------------------------------------------------
            'si debbono ricevere i seguenti parametri get
            '   p_img             : percorso dell'immagine
            '   p_width           : larghezza 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 = img.ImgFromText(ex.Message, Color.White, Brushes.Black, New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point))
                j.ImgSaveToResponseOutputStream(bmp)
    
            End Try
    
    
    
            
        End Sub
        
        
    </script>

    ho messo le spiegazioni. Più semplice di questo non posso.

    ps. se la lettura da remoto supera i 5 s (valore predefinito) va in errore di timeout. Per ovviare, c'è naturalmente il sistema, due - tre righe di codice in più.
    Pietro

  6. #6
    grazie mille pietro lo provo subito e ti faccio sapere!

  7. #7
    ah dimenticavo...la DLL dove la devo mettere? in una cartella con permessi di lettura/scrittura?

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da emilio81
    ah dimenticavo...la DLL dove la devo mettere? in una cartella con permessi di lettura/scrittura?
    crei nel tuo progetto una cartella normale chiamata bin e la metti lì.

    e basta

    ad esempio, se il progetto è prova:

    C:\Inetpub\wwwroot\prova\Bin
    Pietro

  9. #9
    ah ok semplicissimo..

  10. #10
    uhm.. non mi funziona.. mi compare la X rossa anzichè l'immagine...

    Ho fatto come hai detto tu, ho creato una cartella bin e li dentro ho messo la dll..

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 © 2026 vBulletin Solutions, Inc. All rights reserved.