TuttoPC.Info
  Home  |  Hardware  |  Tips & Tricks  |  Reti & Sicurezza  |  E-Commerce  |  Tecnologie Web  |  Connessioni Internet/EMail  |  Glossario  |  Marketing e Web Marketing  |  Script e moduli per ASP.NET
   Sei in:  
Home \ Knowledge Base \ 
Sommario
Hardware
Tips & Tricks
Reti & Sicurezza
E-Commerce
Tecnologie Web
Connessioni Internet/EMail
Glossario
Marketing e Web Marketing
Script e moduli per ASP.NET
Registrazione File Hosting BETA
Login File Hosting BETA
Verifica configurazione DNS
Utility varie
Nuovo Blog
Ricerca nel sito
Segnala il sito a un amico
Se hai trovato questa pagina interessante, scrivilo ad un amico, clicca qui
NEW!! GiDiNet Web Directory
GiDiNet Directory è una Web Directory divisa in più aree tematiche in cui potrete trovare comodamente siti che trattano argomenti di vostro interesse, continua...
Statistiche
Oggi 26/04/2024
sei il visitatore n.
per un totale di visitatori dal 23/04/2007
Hai un problema particolare? Non trovi quello che stai cercando? clicca qui!
Thumbnails automatiche con cache in ASP.NET
Lo script pubblicato in questa pagina, può funzionare su ASP.NET versione 1.X o superiore, serve per generare automaticamente le thumbnails delle immagini del proprio sito.

Sarà possibile creare in automatico le thumbnails richiamando lo script direttamente dalla proprietà src del tag img, quindi questo script può essere utilizzato anche su siti scritti con tecnologie diverse da ASP.NET, senza dover fare modifiche.

Questo script ha due modalità di funzionamento:
Con cache: Salva su disco una copia di ogni thumbnail che poi verrà riutilizzata nelle chiamate successive, questa modalità richiede l'uso di una directory con i permessi in scrittura.
Senza cache: Crea sempre le thumbnails a runtime, qui si potrà risparmiare spazio su disco, tuttavia le prestazioni saranno limitate.

1. Installazione dello script

Per l'installazione dello script è sufficiente copiare il file resizetool.aspx sul proprio spazio web, configurarlo e richiamarlo seguendo le istruzioni al punto 2
Scarica i sorgenti completi


Codice del file resizetool.aspx:
<%@ 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 = 400

    'Limite massimo per la larghezza in pixel
    Private Const MaxWidthSafe As Integer = 400

    '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/tempfiles"

    '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 = 100
    Private Const DefaultWidth As Integer = 100
    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>

2. Configurazione e uso dello script

Per la configurazione è necessario modificare i parametri nel file resizetool.aspx seguendo le istruzioni riportate di seguito:

Private Const MaxHeightSafe As Integer = 400: Impostare l'altezza massima che può essere accettata come parametro.

Private Const MaxWidthSafe As Integer = 400: Impostare la larghezza massima che può essere accettata come parametro.

Private Const ErrorImagePath As String = "/error.jpg": Scrivere il percorso dell'immagine da visualizzare in caso di errori.

Private Const ImageCachePath As String = "/public/tempfiles": Scrivere il percorso da utilizzare per il salvataggio delle thumbnails create.

Private Const DefaultHeight As Integer = 100: Impostare l'altezza predefinita utilizzata in mancanza del relativo parametro.

Private Const DefaultWidth As Integer = 100: Impostare la larghezza predefinita utilizzata in mancanza del relativo parametro.

Private Const DefaultResizeMode As ResizeMode = ResizeMode.AutoResize: Impostare la modalità predefinita da utilizzare in mancanza del relativo parametro come indicato di seguito:
- ResizeMode.AutoResize effettua il ridimensionamento automatico mantenendo le proporzioni, le misure impostate verranno utilizzate come misure massime della thumbnail, che tuttavia sarà ridimensionata mantenendo le proporzioni originali.
- ResizeMode.ManualResize effettua il ridimensionamento utilizzando le misure specificate nei parametri senza mantenere le proporzioni.

Private Const UseCache As Boolean = True: Se impostato su True abilita il sistema di cache delle immagini, le thumbnail verranno create la prima volta, e richiamate dalla cache le volte successive; se impostato su False disabilita la cache.

Le copie delle thumbnails verranno salvate nel percorso indicato in ImageCachePath che dovrà avere i permessi in scrittura.
Al momento della generazione delle thumbnails lo script confronta in automatico le date di modifica dei file, se non è presente una copia aggiornata in cache, la vecchia copia sarà cancellata e sostituita da una nuova.
Il percorso su cui saranno salvate le copie delle thumbnail potrà essere svuotato manualmente quando necessario per liberare spazio, sarà necessario svuotare il percorso della cache anche in seguito alla cancellazione delle immagini dal sito, in modo da rimuovere le thumbnails di immagini che non sono più presenti sullo spazio web.

Per utilizzare lo script è sufficiente richiamarlo direttamente passando i parametri necessari, ad esempio se lo script si trova in /script/resizetool.aspx, sarà possibile ridimensionare l'immagine rihiamando l'indirizzo:
/script/resizetool.aspx?mode=modalita&width=larghezzamax&height=altezzamax&path=percorsoimmagine

Dettagli dei parametri:
modalita(opzionale), sostituire con 0 per ridimensionare mantenendo le proporzioni, 1 per non mantenerle, se il parametro non viene specificato verrà utilizzata la modalità predefinita impostata nello script.
larghezzamax(opzionale), sostituire con la larghezza massima in pixel, se il parametro non viene specificato verrà utilizzata la larghezza predefinita impostata nello script.
altezzamax(opzionale), sostituire con l'altezza massima in pixel, se il parametro non viene specificato verrà utilizzata l'altezza predefinita impostata nello script.
percorsoimmagine(richiesto), sostituire con il percorso dell'immagine, ad esempio /immagini/miafoto.jpg

ad esempio, avendo un'immagine /immagini/miafoto.jpg, e volendo creare una thumbnail di massimo 200 pixel di larghezza e 150 pixel di altezza, mantenendo le proporzioni, si dovrà richiamare l'indirizzo:
/script/resizetool.aspx?mode=0&width=200&height=150&path=/immagini/miafoto.jpg


Pubblicato da: Daniele Iunco il 09/05/2007


Sei interessato a ulteriori informazioni su un particolare argomento? Potete contattaci attraverso l'apposito modulo.

ATTENZIONE: Le operazioni elencate nel sito possono avere esiti negativi o diversi da quanto indicato. Si consiglia di procedere con cautela.
Decliniamo ogni responsabilità per eventuali danni e/o malfunzionamenti derivanti dall'applicazione di ciò che è riportato in queste pagine.
Realizzazione a cura di GiDiNet