Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Implementazione di ridimensionamento immagine

    Ciao a tutti.
    Ho fatto una ricerca sia qui sul forum e sia su google ma nonostante abbia trovato molto materiale non ho trovato nulla che potesse andare bene alle mie esigenze.

    Premetto che non alcuna nozione di asp.net. Ho un sito fatto in normale asp ma volevo affidarmi all'asp.net per fare il ridimensionamento.

    Ho creato una pagina aspx con questo script:

    codice:
    <%@ Page Language="C#" %> 
    <%@ import Namespace="System.Drawing" %> 
    <%@ import Namespace="System.Drawing.Imaging" %> 
    <%@ import Namespace="System.Text.RegularExpressions" %> 
    <script runat="server"> 
    
    int MaxWidth = 100; // Larghezza massima dopo il quale l'immagine viene ridimensionata 
    int MaxHeight = 100; // Altezza massima dopo il quale l'immagine viene ridimensionata 
    int valorelarghezza = 100;
    int valorealtezza = 100;
    System.Drawing.Image oldImage, newImage; 
    
    void Page_Load(Object sender, EventArgs e) { 
    if ( Request.QueryString["FileName"] != null ) { 
    	string strFileName = Convert.ToString(Request.QueryString["FileName"]); 
    		if ( strFileName != "" ) { 
    			try { 
    				oldImage = System.Drawing.Image.FromFile( Server.MapPath(strFileName) );
    				int larghezzafoto = oldImage.Width;
    				int altezzafoto = oldImage.Height;
    				int confrontolarghezza = larghezzafoto - valorelarghezza;
    				int confrontoaltezza = altezzafoto - valorealtezza;
    				if ( confrontolarghezza > 0 || confrontoaltezza > 0 ) {
    					if ( confrontolarghezza > confrontoaltezza ) {
    						altezzafoto = ((valorelarghezza*altezzafoto)/larghezzafoto);
    						if ( (valorealtezza - altezzafoto) < 6 ) {
    							altezzafoto = valorealtezza;
    							}
    						larghezzafoto = valorelarghezza;
    					} else {
    						larghezzafoto = ((valorealtezza*larghezzafoto)/altezzafoto);
    						if ( (valorelarghezza - larghezzafoto) < 6 ) {
    							larghezzafoto = valorelarghezza;
    							}
    						altezzafoto = valorealtezza;					
    					}					
    				}
    				if ( oldImage.Width > MaxWidth || oldImage.Height > MaxHeight ) { 
    					// Immagine troppo grande, visualizzo la miniatura 
    					newImage = oldImage.GetThumbnailImage( (larghezzafoto), (altezzafoto), null, IntPtr.Zero); 
    					Response.ContentType = "image/jpeg"; 
    					newImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    					
    					oldImage.Dispose(); 
    					newImage.Dispose(); 
    					oldImage = null; 
    					newImage = null; 
    				} else { 
    					// Immagine piccola, non faccio nulla 
    					Response.ContentType = "image/jpeg"; 
    					oldImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    					oldImage.Dispose(); 
    					oldImage = null; 
    				} 
    			} catch (Exception ex) { 
    				Response.Write(ex.Message); 
    			} 
    		} 
    	} 
    } 
    
    private bool IsInteger(string strTmp) { 
    Regex objNotIntPattern = new Regex("[^0-9-]"); 
    Regex objIntPattern = new Regex("^-[0-9]+$|^[0-9]+$"); 
    return !objNotIntPattern.IsMatch(strTmp) && objIntPattern.IsMatch(strTmp); 
    } 
    
    </script>
    Passando in querystring il nome dell'immagine procede al ridimensionamento al volo.
    Avrei necessità però di implementare questo script con una funzione in più.
    Vorrei che mi restituisse sempre un immagine di una dimensione precisa, completando l'eventuale parte mancante con uno sfondo colorato (ad esempio bianco)

    In pratica vorrei inserire questa immagine ridimensionata sovrapposta e al centro di in un rettangolo bianco (oppure di un'altra immagine) di dimensione prefissata.

    Potete aiutarmi?

    Grazie in anticipo
    Se per ogni sbaglio avessi 1000 Lire che vecchiaia che passerei! [Non è tempo per noi - Ligabue]
    Strade?! Dove andiamo noi non ci servono.....strade!

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ti spiego come faccio io, per ottenere le immagini di sotto; vedi se ti può servire.

    tipo_2


    tipo_3


    tipo_3, immagine fusa su un'altra



    per prima cosa mi scarico le due dll all'indirizzo:
    http://web.tiscali.it/archivio_esempi/zip/gdi.zip

    e le copio nella directory "bin" del sito web


    dopo di che ho la pagina a.asp
    codice:
    <% option explicit  %>
    <% Response.CharSet = "utf-8" %>
    <!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></title>
    </head>
    <body>
        [img]a.aspx?p_img=http://static.panoramio.com/photos/original/216697.jpg&p_width=400&p_opzione=3[/img]
    </body>
    </html>

    L'elemento <img, ha come sorgente, una pagina aspx, a.aspx.
    Manda tre parametri:
    p_img -> nome immagine, che può essere o un percorso fisico (c:\immagini\img.jpg), o un percorso logico (../img.png), o un indirizzo remoto (http://www/xxx/img.tif)

    p_width -> è la dimensione max dell'immagine che voglio ottenere

    p_opzione -> valori 1, 2, 3, l'ho messo per fare vedere come funziona


    pagina a.aspx
    codice:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Drawing" %>
    <%@ 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, fisico, logico, remoto
            '   p_width         : dimensione max immagine
            '   p_opzione       : 1=ridimensiono, 2 adatto, 3 fondo
            '---------------------------------------------------------------------------
            Dim p_img As String = Request.QueryString("p_img")
            Dim p_width As String = Request.QueryString("p_width")
            Dim p_opzione As String = Request.QueryString("p_opzione")
            
            
            'messaggio in caso di errore
            Dim result As String = ""
    
            Dim bmp As Bitmap = Nothing
            
            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
                
                If String.IsNullOrEmpty(p_opzione) Then p_opzione = "1"
    
                'se il messaggio è valorizzato visualizzo il messaggio di errore
                If result.Length > 0 Then Throw New Exception(result)
                 
                'leggo l'immagine
                bmp = j.ImgLoad(p_img)
               
                
                
                Select Case p_opzione
                    Case "1" 'ridimensiono senza adattarla al contenitore
                        j.ImgResize(bmp, CInt(p_width))
                        
                    Case "2" 'adatto l'immagine ad un contenitore nero di date dimensioni
                        j.ImgFit(bmp, 400, 400, Color.Black)
                    
                    Case "3" 'fondo l'immagine nel contenitore (che può essere un'altra immagine) centrandola
                        'ridimensiono l'immagine
                        j.ImgResize(bmp, CInt(p_width))
                        
                        'creo una immagine di sottofondo oppure apro una immagine che faccia da sottofondo
                        Dim sfondo As Bitmap = j.ImgCreateBitmap(450, 450, Color.Black)
    
                        'fondo l'immagine nello sfondo
                        j.ImgMerge(sfondo, bmp)
                        
                        'ricopio l'immagine finale, in bmp, che è quella che voglio
                        bmp.Dispose()
                        bmp = sfondo
                        
                End Select
                
                'salvo l'immagine nel flusso di uscita, formato jpg, compressione predefinita
                j.ImgSaveToResponseOutputStream(bmp)
                
    
            Catch ex As Exception
                Try
                    Using bmp1 As Bitmap = j.ImgFromText(ex.Message, Color.White, Brushes.Black, New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point))
                        j.ImgSaveToResponseOutputStream(bmp1)
                    End Using
                Catch
                End Try
                       
            Finally
                If bmp IsNot Nothing Then bmp.Dispose()
            End Try
    
    
    
            
        End Sub
        
        
    </script>
    Pietro

  3. #3
    Grazie! Sembrerebbe quello che fa al caso mio!
    Ho solo un unico grosso problema....nell'hosting a cui mi appoggio non ho al cartella bin (ne cgi-bin)...

    posso includere in altro modo le classi? Oppure posso inserirli in un altra cartella con normali permessi di scrittura?
    Se per ogni sbaglio avessi 1000 Lire che vecchiaia che passerei! [Non è tempo per noi - Ligabue]
    Strade?! Dove andiamo noi non ci servono.....strade!

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Saturno83
    Grazie! Sembrerebbe quello che fa al caso mio!
    Ho solo un unico grosso problema....nell'hosting a cui mi appoggio non ho al cartella bin (ne cgi-bin)...

    posso includere in altro modo le classi? Oppure posso inserirli in un altra cartella con normali permessi di scrittura?
    :master: non so proprio, ho sempre fatto e visto fare così

    Perchè non provi a chiedere al tuo hosting?


    ps. il sito deve essere configurato per il framework 2


    ps. quella scritta in corsivo sull'ultima foto è fatta naturalmente da programma, al volo.
    se ti interessa, aggiungo la riga di codice mancante.
    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.