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

    resize con save della preview

    ciao
    premetto che non capisco molto di asp.net.
    ho trovato in rete un resize che uso in una galleria di immagini... ecco il codice:
    codice:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Drawing" %>
    
    <script runat="server">
        'Copyright (C) 2007 Daniele Iunco
    
        'This program is free software; you can redistribute it and/or modify
        'it under the terms of the GNU General Public License as published by
        'the Free Software Foundation; either version 2 of the License, or
        '(at your option) any later version.
    
        'This program is distributed in the hope that it will be useful,
        'but WITHOUT ANY WARRANTY; without even the implied warranty of
        'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        'GNU General Public License for more details.
    
        'You should have received a copy of the GNU General Public License along
        'with this program; if not, write to the Free Software Foundation, Inc.,
        '51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    
        'resizetool.aspx v1.0
        'Author: Daniele Iunco
        'Date: 9th May 2007
    
        'Limite massimo per l'altezza in pixel
        Private Const MaxHeightSafe As Integer = 800
    
        'Limite massimo per la larghezza in pixel
        Private Const MaxWidthSafe As Integer = 800
    
        'Percorso dell'immagine su cui reindirizzare le richieste non valide
        Private Const ErrorImagePath As String = "/error.jpg"
    
        'Percorso in cui salvare le copie delle immagini, il percorso indicato deve avere i permessi in scrittura
        Private Const ImageCachePath As String = "/public/tmp_photo/preview_thumb_sofia_tmp"
    
        'Salva su disco una copia riutilizzabile delle thumbnails create
        Private Const UseCache As Boolean = True
        
        'Di seguito sono riportati i valori predefiniti che verranno utilizzati quando non vengono specificati parametri
        Private Const DefaultHeight As Integer = 450
        Private Const DefaultWidth As Integer = 450
        Private Const DefaultResizeMode As ResizeMode = ResizeMode.AutoResize
    
        Private Enum ResizeMode
            AutoResize = 0
            ManualResize = 1
        End Enum
    
        Private ReadOnly Property Mode() As ResizeMode
            Get
                Dim myReqMode As String = Request("mode")
                If myReqMode Is Nothing OrElse Not IsNumeric(myReqMode) Then Return DefaultResizeMode
                If CInt(myReqMode) = 0 Then Return ResizeMode.AutoResize Else Return ResizeMode.ManualResize
            End Get
        End Property
    
        Private ReadOnly Property MaxHeight() As Integer
            Get
                Dim myValue As String = Request("height")
                If myValue Is Nothing OrElse Not IsNumeric(myValue) Then Return DefaultHeight
                Dim myIntValue As Integer = CInt(myValue)
                If myIntValue < MaxHeightSafe Then
                    Return myIntValue
                Else
                    Return MaxHeightSafe
                End If
            End Get
        End Property
    
        Private ReadOnly Property MaxWidth() As Integer
            Get
                Dim myValue As String = Request("width")
                If myValue Is Nothing OrElse Not IsNumeric(myValue) Then Return DefaultWidth
                Dim myIntValue As Integer = CInt(myValue)
                If myIntValue < MaxWidthSafe Then
                    Return myIntValue
                Else
                    Return MaxWidthSafe
                End If
            End Get
        End Property
    
        Private _ImagePath As String
        Private ReadOnly Property ImagePath() As String
            Get
                If Not _ImagePath Is Nothing Then Return _ImagePath
                Dim sRequestPath As String = Request.QueryString("path")
    
                If sRequestPath Is Nothing Then Return Nothing
    
                'Rimuovo le doppie / e i doppi . con le espressioni regolari
                sRequestPath = Regex.Replace(sRequestPath, "\/{2,}", "/")
                sRequestPath = Regex.Replace(sRequestPath, "\.{2,}", ".")
    
                If sRequestPath.Substring(0, 1) = "/" Then sRequestPath = sRequestPath.Substring(1)
                _ImagePath = sRequestPath
    
                Return _ImagePath
            End Get
        End Property
    
        Sub Page_Load(ByVal Sender As Object, ByVal e As System.EventArgs)
            Dim LocalImageFilePath As String
            Dim LocalThumbnailCacheFilePath As String
    
            LocalImageFilePath = Server.MapPath("/" & ImagePath)
            If Not File.Exists(LocalImageFilePath) Then
                Response.Redirect(ErrorImagePath)
                Exit Sub
            End If
    
            Dim TempFilePath As String = Server.MapPath(ImageCachePath)
            LocalThumbnailCacheFilePath = Path.Combine(TempFilePath, ImagePath.Replace("/", "_")) & "_" & Int(Mode) & "_" & Int(MaxWidth) & "_" & Int(MaxWidth) & ".thumb"
    
            Dim mySourceFile As New System.IO.FileInfo(LocalImageFilePath)
    
            If UseCache Then
                If File.Exists(LocalThumbnailCacheFilePath) Then
                    Dim myDestFile As System.IO.FileInfo
                    myDestFile = New System.IO.FileInfo(LocalThumbnailCacheFilePath)
                    'Se il file della thumbnail è stato modificato dopo il file sorgente
                    'allora è valido e uso quello
                    If myDestFile.LastWriteTime.CompareTo(mySourceFile.LastWriteTime) = 1 Then
                        'Il file esiste e va bene
                        Response.ContentType = "image/jpeg"
                        Response.WriteFile(myDestFile.FullName)
                        Response.End()
                        Exit Sub
                    Else
                        'Il file esiste ma è vecchio e va sostituito
                        myDestFile.Delete()
                    End If
                End If
            End If
            
            Dim orginalimg, thumb As System.Drawing.Image
    
            Try
                orginalimg = System.Drawing.Image.FromFile(mySourceFile.FullName)
            Catch
                Response.Redirect(ErrorImagePath)
                Exit Sub
            End Try
    
            Dim ThumbnailWidth, ThumbnailHeight As Integer
            Select Case Mode
                Case ResizeMode.AutoResize
                    ' ResizeMode.AutoResize: Ridimensiona l'immagine per restare nei limiti impostati, mantenendo le proporzioni
                    Dim myRatio As Double = orginalimg.Width / orginalimg.Height
    
                    If myRatio > 1 Then 'La larghezza è maggiore dell'altezza, quindi fisso l'altezza e calcolo il resto
                        ThumbnailHeight = MaxHeight
                        ThumbnailWidth = orginalimg.Width / orginalimg.Height * MaxHeight
                    ElseIf myRatio < 1 Then 'L'altezza è maggiore della larghezza, quindi fisso la larghezza e calcolo il resto
                        ThumbnailWidth = MaxWidth
                        ThumbnailHeight = orginalimg.Height / orginalimg.Width * MaxWidth
                    ElseIf myRatio = 1 Then 'Larghezza = Altezza
                        ThumbnailWidth = MaxWidth
                        ThumbnailHeight = MaxHeight
                    End If
                Case ResizeMode.ManualResize
                    ' ResizeMode.ManualResize: Ridimensiona con le misure indicate nei parametri
                    ThumbnailWidth = MaxWidth
                    ThumbnailHeight = MaxHeight
            End Select
    
            Response.ContentType = "image/jpeg"
    
            'Creo l'immagine con le misure calcolate, in formato Jpeg
            thumb = orginalimg.GetThumbnailImage(ThumbnailWidth, ThumbnailHeight, Nothing, IntPtr.Zero)
    
            If UseCache Then
                Dim myS As New IO.FileStream(LocalThumbnailCacheFilePath, IO.FileMode.CreateNew)
                thumb.Save(myS, System.Drawing.Imaging.ImageFormat.Jpeg)
                myS.Close()
                orginalimg.Dispose()
                thumb.Dispose()
                Response.WriteFile(LocalThumbnailCacheFilePath)
            Else
                thumb.Save(Response.OutputStream, Imaging.ImageFormat.Jpeg)
                thumb.Dispose()
            End If
        End Sub
    </script>
    ogni volta che apro la pagina che contiene le preview lui fa il resize e salva una copia nella cartella che gli ho settato, pero quando mi ricollego anzicche caricarsi le miniature che si è creato ... fa nuovamente il resize.
    risultato: ci impiega sempre un casino a caricare le preview


    come posso modificare lo script in maniera che quando richiamo la foto se esiste la preview si carica questa e non rifa tutto il giro?
    ..: Serie A :..
    ..: FORZA PALERMOOOOoooo.....

  2. #2
    sto codice fa parecchio schifo.

    Se hai voglia di darmi retta, cerca in rete qualcosa di più decente.

    La gestione delle immagini simile a questa, si fa con gli HttpHandler (file .ashx)
    Fai una ricerca per "immagini Httphandler resize thumb", trovarai tanti esempi

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.