Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630

    upload con ricampionamento immagine

    Salve a tutti,
    ho realizzato un sito per un agenzia immobiliare, ora il cliente dato che carica immagini di alta qualità e dimensioni mentre sul sito si vedranno in dimensioni prestabilite da me, c'è un sistema che quando fà l'upload faccia anche il ricampionamento dell'immagine alle dimensioni prestabilite?
    Per esempio come fà frontpage quando si modifica la dimensione dell'immagine, la fà ricampionare alle dimensione, guadagnando spazio, velocità di caricamento e visibilità ottima da parte dell'utente che visita il sito.
    Vi ringrazio anticipatamente.
    G.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    nessuno può aiutarmi?
    Grazie
    G.

  3. #3
    http://www.imente.org/index.php/deve...sses/wbresize/ per avere un qualcosa già pronto e valido (C#).
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Grazie SANTINO83_02,
    ho visto il link ma non è ho capito come implementarlo al mio script che fà l'upload, cioè:
    codice:
    <%
    
    id = Request.querystring("id")
    
    
    Class FileUploader
    	Public  Files
    	Private mcolFormElem
    	Private imaxSize
    	Private imaxFileSize
    	Private bOverWrite
    	Public  fileExt
    	Public  error
    	Public  errorDesc
    	
    	Private Sub Class_Initialize()
    		Set Files = Server.CreateObject("Scripting.Dictionary")
    		Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    		bOverWrite = False
    	End Sub
    	
    	Private Sub Class_Terminate()
    		If IsObject(Files) Then
    			Files.RemoveAll()
    			Set Files = Nothing
    		End If
    		If IsObject(mcolFormElem) Then
    			mcolFormElem.RemoveAll()
    			Set mcolFormElem = Nothing
    		End If
    	End Sub
    
    	Public Property Get Form(sIndex)
    		Form = ""
    		If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    	End Property
    	
    	Public Property Let maxFileSize(iSize)
    	  imaxFileSize = iSize
    	End Property
    	
    	Public Property Get maxFileSize
    	  maxFileSize = imaxFileSize
    	End Property	
    
    	Public Property Let maxSize(iSize)
    	  imaxSize = iSize
    	End Property
    
    	Public Property Get maxSize
    	  maxSize = imaxSize
    	End Property
    	
    	Public Property Let OverWrite(bValue)
    	  bOverWrite = bValue
    	End Property
    
    	Public Property Get OverWrite
    	  OverWrite = bOverWrite
    	End Property		
    	
    	Public Default Sub Upload()
    		Dim biData, sInputName
    		Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    		Dim nPosFile, nPosBound
        Dim counter
    
    		error = False
    		errorDesc = ""
    		
    		'Se la somma delle dimensioni dei file è filtrata
    		If Not IsNull(imaxSize) AND IsNumeric(imaxSize) AND imaxSize <> "" Then
    			'Se la somma delle dimensioni dei file è maggiore a quella impostata genera ERRORE
    			If Request.TotalBytes > imaxSize Then
    				Error = True
    				errorDesc = errorDesc & "La somma delle dimensioni dei file è più grande di " & imaxSize & " byte" & "
    "
    				Exit Sub
    			End If
    		End If
    
    		biData = Request.BinaryRead(Request.TotalBytes)
    
    		nPosBegin = 1
    		nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    		
    		If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
    		 
    		vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    		nDataBoundPos = InstrB(1, biData, vDataBounds)
    		
    		'contatore dei file
    		counter = 0
    
    		'Cicla i dati contenenti le informazioni dei file
    		Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
    		
    		  counter = counter + 1	
    		  
    			nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
    			nPos = InstrB(nPos, biData, CByteString("name="))
    			nPosBegin = nPos + 6
    			nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    			sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    			nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
    			nPosBound = InstrB(nPosEnd, biData, vDataBounds)
    			
    			If nPosFile <> 0 And  nPosFile < nPosBound Then
    				Dim oUploadFile, sFileName, sFileName1, sFileExt, dotpos
    				Set oUploadFile = New UploadedFile
    				
    				nPosBegin = nPosFile + 10
    				nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
    				
    				sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    				
    				'Se le estensioni sono filtrate
    				If Not IsNull(fileExt) Then
    
      				'Se il campo file del form contiene un file prosegui
      				If sFileName <> "" Then
      				
    				    'Ricaviamo nome completo, nome senza estensione, estensione
    				    sFileName1 = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))  				
        				dotpos = 0
        				dotpos = InStrRev(sFileName1, ".")
        				oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\")) 'nome completo
        				oUploadFile.FileExt = Right(sFileName1, Len(sFileName1) - dotpos)                'estensione
        				oUploadFile.FileNameShort = Left(sFileName1, dotpos-1)                           'nome senza estensione
        				oUploadFile.OverWrite = bOverWrite
        				
        				sfileExt = oUploadFile.FileExt				
    
      				  'Se l'estensione non è tra quelle ammesse genera ERRORE
      				  If Instr(fileExt, sFileExt) = 0 Then
      				  	Error = True
      				  	errorDesc = errorDesc & "ATTENZIONE
    Il tipo di file caricato non è valido
    (devi caricare solo file con estensione ." & fileExt & ")" & "
    "
      				  Else
          				nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
          				nPosBegin = nPos + 14
          				nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
          				
          				oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
          				
          				nPosBegin = nPosEnd+4
          				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
          				oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
          				
          				'If (oUploadFile.FileSize > 0) AND (oUploadFile.FileSize <= imaxFileSize) Then Files.Add LCase(sInputName), oUploadFile
          				
                  'Se la dimensione max per il singolo file non è filtrata allora può essere caricato
          				If Not IsNull(imaxFileSize) AND IsNumeric(imaxFileSize) AND imaxFileSize <> "" Then
          				
          				  'Se il file supera la dimensione max ammessa per il singolo file allora genera ERRORE
            				If oUploadFile.FileSize > imaxFileSize Then
          	 			  	Error = True
          				  	errorDesc = errorDesc & "ATTENTION - The File (" & oUploadFile.FileName & ")have a not ammissed dimension (The max dimension is: " & imaxFileSize & " bytes)
    "
          				  	'Exit Sub
          				  Else
          				    Files.Add counter-1, oUploadFile
          				    'Files.Add LCase(sInputName), oUploadFile
          				  End If				
          				Else
          				  Files.Add counter-1, oUploadFile
          				  'Files.Add LCase(sInputName), oUploadFile      				
          				End If
      				  End If
    
      				End If
    
    				'Se le estensioni non sono filtrate carica tutti i file
    				Else
    
      				'Se il campo file del form contiene un file prosegui
      				If sFileName <> "" Then
      				
    				    sFileName1 = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))  				
        				dotpos = 0
        				dotpos = InStrRev(sFileName1, ".")
        				
                'Se il file ha un estensione qualsiasi può essere caricato
        				If dotpos > 0 AND dotpos < Len(sFileName1) Then
          				oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
          				oUploadFile.FileExt = Right(sFileName1, Len(sFileName1) - dotpos)
          				oUploadFile.FileNameShort = Left(sFileName1, dotpos-1)
          				oUploadFile.OverWrite = bOverWrite
          				
          				sfileExt = Right(sFileName1, Len(sFileName1) - InStrRev(sFileName1, "."))				
      
          				nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
          				nPosBegin = nPos + 14
          				nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
          				
          				oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
          				
          				nPosBegin = nPosEnd+4
          				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
          				oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
          				
        				  'Se la dimensione max per il singolo file non è filtrata allora può essere caricato
          				If Not IsNull(imaxFileSize) AND IsNumeric(imaxFileSize) AND imaxFileSize <> "" Then
    
        				    'Se il file supera la dimensione max ammessa per il singolo file allora genera ERRORE
            				If oUploadFile.FileSize > imaxFileSize Then
          	 			  	Error = True
          				  	errorDesc = errorDesc & "File #" & counter & "(" & oUploadFile.FileName & "): dimensione file non ammessa (max: " & imaxFileSize & " bytes)
    "
          				  	'Exit Sub
          				  Else
          				    Files.Add counter-1, oUploadFile
          				    'Files.Add LCase(sInputName), oUploadFile
          				  End If				
          				Else
          				  Files.Add counter-1, oUploadFile
          				  'Files.Add LCase(sInputName), oUploadFile      				
          				End If			
    
                'Se il file non ha estensione genera ERRORE      		
          			Else
      	 			  	Error = True
      				  	errorDesc = errorDesc & "File #" & counter & "(" & sFileName1 & "): file senza estensione
    "
          		  End If
    
      				End If
    
    				End If
    			Else
    				nPos = InstrB(nPos, biData, CByteString(Chr(13)))
    				nPosBegin = nPos + 4
    				nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
    				If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    			End If
    
    			nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
    		Loop
    	End Sub
    
    	'String to byte string conversion
    	Private Function CByteString(sString)
    		Dim nIndex
    		For nIndex = 1 to Len(sString)
    		   CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
    		Next
    	End Function
    
    	'Byte string to string conversion
    	Private Function CWideString(bsString)
    		Dim nIndex
    		CWideString =""
    		For nIndex = 1 to LenB(bsString)
    		   CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1))) 
    		Next
    	End Function
    End Class
    
    Class UploadedFile
    	Public ContentType
    	Public FileName
    	Public FileNameShort
    	Public FileExt
    	Public FileData
    	Public OverWrite
    	
    	Public Property Get FileSize()
    		FileSize = LenB(FileData)
    	End Property
    
    Public Sub SaveToDisk(sPath)
    		Dim oFS, oFile
    		Dim nIndex
    	
    		If sPath = "" Or FileName = "" Then Exit Sub
    		If Mid(sPath, Len(sPath)) <> "../../../../../foto/" Then sPath = sPath & "../../../../../foto/"
    	
    		Set oFS = Server.CreateObject("Scripting.FileSystemObject")
    		If Not oFS.FolderExists(sPath) Then Exit Sub	
    			
    ft = "_01"
    
    		If Not OverWrite Then
    		  i = 0
    		
    		  Do While oFS.FileExists(sPath & id & ft & "." & FileExt)
    		    i = i + 1
    		    back = CStr(i)
    		  Loop
    		End If
    
    		Set oFile = oFS.CreateTextFile(sPath & id & ft &  "." & FileExt, True)
    	
    
    		For nIndex = 1 to LenB(FileData)
    	    oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
    		Next
    
    
    		oFile.Close
    
    		Set oFS = Nothing
    		
    
    	End Sub
    
    
    End Class
    %>
    Puoi aiutarmi?
    Grazie
    G.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Nessuno può aiutarmi?
    Grazie
    G.

  6. #6
    allora,

    questo è quello che uso io. Io avevo leggermente modificato la webresize v.021, ora ho visto che ne sono uscite altre versioni, quindi indubbiamente ti faccio vedere uno script vecchio (anche se efficace). Però è un passo avanti

    allora, tu devi fare la seguente cosa:

    - fai l'upload della tua immagine con il tuo script
    - una volta che hai fatto l'upload, ti prendi il nome dell'immagine, e usi la funzione:

    codice:
    '************ gestione delle immagini
    
    
    function ImgResize(nomeImg,nNome,bw,bh, fromPath, destPath)
    
    dim objHTTP,url,statusCode
    
    set objHTTP=server.CreateObject("MSXML2.ServerXMLHTTP")
    
    dim targetFrom,targetTo
    
    targetFrom=server.URLEncode(fromPath & "/" & nomeImg)
    targetTo=server.URLEncode(destPath)
    nNome=server.URLEncode(nNome)
    
    url="http://www.tuosito.ext/percorso/wbresize.aspx?img=" & targetFrom & "&nn=" & nNome & "&bw=" & bw & "&bh=" & bh & "&fp=" & targetTo
    
    objHTTP.open "GET",url,false
    objHTTP.send("")
    
    statusCode=cint(objHTTP.responseXml.getElementsByTagName("stato/codice")(0).text)
    
    set objHTTP=nothing
    
    ImgResize=statusCode
    end function
    dove:

    nomeImg è il nome dell'immagine che hai caricato sul server
    fromPath è il percorso dove si trova ora l'immagine (es server.mapPath("/public") )
    bw e bh sono la larghezza e l'altezza dell'immagine da ridimensionare
    nNome è il nome che vuoi dare alla immagine ridimensionata (se lo passi uguale a nomeImg, dovrebbe sovrascrivertela, non ricordo)
    destPath è la cartella dove vuoi salvare l'immagine ridimensionata

    la wbresize.aspx è la seguente:

    codice:
    <%@ Page Language="C#" AutoEventWireup="true" Debug="true" ContentType="text/xml" %>
    <%@ import Namespace="System.IO" %>
    <%@ import Namespace="System.Drawing" %>
    <%@ import Namespace="System.Drawing.Imaging" %>
    <script runat="server">
    
    /*  WBRESIZE 0.21
    	developer by imente 16/10/2006
        modified by santino83 7/02/2007
    
    parametri (da querystring):
    	img = nome del file originale
    	s = percentuale di ridimensionamento (es: 20)
    	bw = larghezza fissata (la altezza viene calcolata di conseguenza per mantenere le dimensioni)
    	bh = altezza fissata (la larghezza viene calcolata di conseguenza per mantenere le dimensioni)
    	*** si può indicare S oppure W oppure H. se si indica S, W e H vengono ignorati.
    	*** se si indica sia W che H viene forzato il ridimensionamento e non verranno rispettate le proporzioni
    	
    	c = compressione jpeg (valori da 1 a 100)
    	*** se non impostata la compressione viene impostata a 100
    	
    	fp = cartella dove salvare la thumb
    	nn = nome della thumb (se non indicato genera thumb.jpg)
    
    */
    
    
    
    void Page_Load(Object sender, EventArgs e) {
    	
    	// parametri
    	string fileName = (Request.QueryString["img"]==null)?"":Request.QueryString["img"]; // nome del file originale
    	string folder = (Request.QueryString["fp"]==null)?"":Request.QueryString["fp"]; // cartella dove salvare la thumb
    	string newName = (Request.QueryString["nn"]==null)?"thumb.jpg":Request.QueryString["nn"]; // nuovo nome del file
    	double requestedWidth = (Request.QueryString["bw"]==null)?0:Convert.ToDouble(Request.QueryString["bw"]); // larghezza impostata
    	double requestedHeight = (Request.QueryString["bh"]==null)?0:Convert.ToDouble(Request.QueryString["bh"]); // altezza impostata
    	int scaleFactor = (Request.QueryString["s"]==null)?0:Convert.ToInt32(Request.QueryString["s"]); // fattore di scalo per la miniatura
    	int compression = (Request.QueryString["c"]==null)?100:Convert.ToInt32(Request.QueryString["c"]); // compressione (0-100)
    	
    	// variabili di servizio
    	int originalWidth = 0;
    	int originalHeight = 0;
    	int thumbWidth = 0;
    	int thumbHeight = 0;
    	
    	if ( fileName.Trim().Length>0 ) {
    		try {
    		
    			//carica l'immagine e ne recupera le dimensioni
    			System.Drawing.Image image;
    			image = System.Drawing.Image.FromFile( Server.MapPath(fileName) );
    			originalWidth = image.Width;
    			originalHeight = image.Height;
    			image.Dispose();
    			image = null;
    			
    			//se una dimensione è più grande dell'immagine e l'altra no, 
    			//la diminuisce fino a renderla pari all'immagine
    			if ( originalWidth > requestedWidth && originalHeight < requestedHeight ) requestedHeight = originalHeight; 
    			if ( originalWidth < requestedWidth && originalHeight > requestedHeight ) requestedWidth = originalWidth;   
    			
    			if ( originalWidth >= requestedWidth && originalHeight >= requestedHeight && scaleFactor >= 0 && scaleFactor < 100 ) {
    				//l'immagine è da ridimensionare: calcola le dimensioni della miniatura
    				if ( scaleFactor == 0) {
    					if ( requestedWidth == 0 && requestedHeight != 0) {
    						// forzata requestedHeight
    						thumbWidth = Convert.ToInt32(Math.Ceiling(requestedHeight*originalWidth/originalHeight));
    						thumbHeight = Convert.ToInt32(requestedHeight);
    					} else if (requestedHeight == 0 && requestedWidth != 0) {
    						// forzata requestedWidth
    						thumbWidth = Convert.ToInt32(requestedWidth);
    						thumbHeight = Convert.ToInt32(Math.Ceiling(requestedWidth*originalHeight/originalWidth));
    					} else if (requestedHeight != 0 && requestedWidth != 0) {
    						// forzata sia requestedWidth che requestedHeight
    						thumbWidth = Convert.ToInt32(requestedWidth);
    						thumbHeight = Convert.ToInt32(requestedHeight);
    					} else {
    						// ERR: nessun parametro impostato
    						error("Nessun parametro impostato");
    						return;
    					}
    				} else {
    					// scalata: percentuale delle dimensioni
    					thumbWidth = (originalWidth*scaleFactor/100);
    					thumbHeight = (originalHeight*scaleFactor/100);
    				}
    			} else {
    				// sovradimensionamento (si impostano le nuove dimensioni a 0 per evitare il ridimensionamento)
    				thumbWidth = 0;
    				thumbHeight = 0;
    			}
    			
    			// esegue le operazioni di output
    			if ( folder != "" ) {
    				// output su file
    				Resize(fileName,thumbWidth,thumbHeight,folder+"\\"+newName,compression);
    
                    finish();
                    
    			} else {
    				
                    //Errore nessun folder di destinazione indicato
                    error("Nessun folder di destinazione indicato");
    			}
    			
    		} catch (System.IO.FileNotFoundException ex) {
    			// ERR: immagine inesistente
    			error("Immagine inesistente");
    			return;
    		} catch (Exception ex) {
    			error(ex.Message);
    		}
    	} else {
    		// ERR: nessuna immagine indicata
    		error("Nessuna immagine indicata");
    		return;
    	}
    }
    
    private void error(String error) {
    	// errore
        print(100, error);
    }
    
        private void finish()
        {
            print(200, "Immagine controllata correttamente");
        }
        
        private void print(int status, String msg)
        {
            String printed;
    
            printed = @"<?xml version=""1.0"" encoding=""iso-8859-1""?>";
            printed += @"<risposta><stato><codice>" + status + @"</codice><desc>" + msg + @"</desc></stato>";
            printed += @"</risposta>";
    
            Response.Write(printed);
        }
    
    private void Resize(string FileName, int requestedWidth, int requestedHeight, string NewFileName, int compression) {
    
    	FileStream file=new FileStream(Server.MapPath(FileName),FileMode.Open);
    	string NewFile = Server.MapPath(NewFileName);
    
    	//creo il bitmap dallo stream
    	System.Drawing.Image bmpStream=System.Drawing.Image.FromStream(file);
    	
    	//creo un nuovo bitmap
    	Bitmap image;
    	
    	//controllo valori in entrata
    	if (compression <= 0) compression = 100;
    	
    	//se indicato lo ridimensiono
    	if (requestedWidth == 0 || requestedHeight == 0) image=new Bitmap(bmpStream);
    	else image=new Bitmap(bmpStream,new Size(requestedWidth,requestedHeight));
    	
    	ImageCodecInfo jpegCodecInfo;
    	jpegCodecInfo = GetEncoderInfo("image/jpeg");
    	
    	System.Drawing.Imaging.Encoder encoder;
    	EncoderParameter encoderParameter;
    	EncoderParameters encoderParameters;
    	encoder = System.Drawing.Imaging.Encoder.Quality;
    	encoderParameters = new EncoderParameters(1);
    	encoderParameter = new EncoderParameter(encoder, compression);
    	encoderParameters.Param[0] = encoderParameter;
    	
    
    		// output su file
    		image.Save(NewFile, jpegCodecInfo, encoderParameters);
    	
    	
    	encoderParameters = null;
    	encoderParameter = null;
    	encoder = null;
    	jpegCodecInfo = null;
    	
    	image.Dispose();
    	image = null;
    	
    	file.Close();
    	file = null;
    
    }
    
    private ImageCodecInfo GetEncoderInfo(string mimeType) {
       ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
       for (int j = 0; j< encoders.Length; j++) {
          if (encoders[j].MimeType == mimeType) {
               return encoders[j];
    	  }
       }
       return null;
    }
    </script>
    se vuoi modificarti la funzione che la richiama, magari perchè ti serve un diverso comportamento, puoi modificarla tranquillamente leggendo anche in wbresize.aspx, all'inizio tra i commenti, come si usano i parametri che accetta la pagina.


    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.