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

    Upload, crea thumbnail, resize e aggiunge Watermark

    Salve a tutti.
    Posto qui di seguito lo script di una pagina che uso sul mio sito e che forse potrà essere d'aiuto a qualcuno.
    Le origini dello script sono varie. Io l' ho solamente adattato alle mie necessità. Siccome molti suggerimenti e aiuti li ho ricevuti da voi tutti, dopo essermi accertato del corretto funzionamento, almeno nel mio caso, lo metto a disposizione di tutti, ringraziando quanti, tra i più esperti mi hanno aiutato.

    La pagina in questione riceve delle variabili da una normale asp e si apre in una modal popup. Permette di elaborare una foto. Dall'originale crea due nuove immagini. Una thumbnail ed un'altra foto più grande (mantenendo l'estensione originale del file). Alla foto grande aggiunge un WATERMARK, salva entrambe le nuove foto rinominandole come preferito, e poi rimanda ad un'altra pagina, sempre nel mio caso specifico, che completa con un altro pezzo tutto il processo.

    Il motivo per cui penso che possa essere utile a qualcuno è che questa è una pagina aspx che può tranquillamente essere integrata in un sito dove ci sono solo pagine asp che, al contrario, necessiterebbero di componenti aggiuntivi.

    <%@ Page Trace="False" Language="vb" aspcompat="false" debug="true" validateRequest="false"%>
    <%@ Import Namespace=System.Drawing %>
    <%@ Import Namespace=System.Drawing.Imaging %>
    <%@ Import Namespace=System %>
    <%@ Import Namespace="System.Drawing.Drawing2d" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace=System.Web %>

    <SCRIPT LANGUAGE="VBScript" runat="server">

    const Lx = 50 ' altezza thumbnail
    const Ly = 50 ' larghezza thumbnail
    const Lx2 = 680 ' larghezza foto ridimensionata
    const Ly2 = 480 ' altezza foto ridimensionata
    const upload_dir = "/ad_images/" ' directory nella quale salvare le immagini
    const upload_original = "Ad_" ' prefisso che verrà anteposto alla foto grande
    const upload_thumb = "_thumb" ' desinenza che identifica le thumbnail
    const upload_max_size = 3000 ' dimensione massima consentita del file da caricare
    dim fileExt ' variabile dell'estansione del file
    dim newWidth, newHeight as integer ' nuove dimensioni alt e largh della thumb
    dim newWidth2, newHeight2 as integer ' nuova dimensioni alt e largh della foto grande
    dim l2 ' variabile temporanea per proporzionare lla thumb
    dim l3 ' variabile temporanea per proporzionare la foto grande
    dim fileFld as HTTPPostedFile ' variabile nome campo del file da caricare
    Dim originalimg As System.Drawing.Image ' variabile temporanea del file originale
    Dim newImg As System.Drawing.Image ' variabile temporanea della nuova immagine
    dim msg ' variabile dell'eventuale messaggio di errore
    dim upload_ok as boolean ' variabile di conferma del buon fine dell'operazione
    dim ad_id ' nome variabile che contiene l'identificativo del record_id della pagina precedente
    dim picnumber ' nome variabile che contiene il numero sequenziale da includere nel nuovo nome file
    dim egsist ' nome variabile che è servita a me
    dim mext ' come riga precedente
    dim avviso ' come riga precedente
    dim controllo ' come riga precedente
    dim adid ' come riga precedente

    </script>
    <script language="vbscript" runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim ad_id As String = Me.Request.QueryString("ad_id")
    Dim picnumber As String = Me.Request.QueryString("picnumber")

    If ad_id IsNot Nothing Then
    Me.Label1.Text = "annuncio n° " & ad_id
    End If

    If picnumber IsNot Nothing Then
    Me.Label2.Text = "Foto n° " & picnumber
    End If

    If ad_id = Nothing Or picnumber = Nothing Then
    msg = "ERRORE...Mancano riferimenti necessari per caricare le immagini."
    msg = msg & " Per effettuare questa operazione devi andare alla pagina di"
    msg = msg & " principale del Foto Manager e da quella potrai gestire tutte le tue foto."
    response.write(msg)
    response.end
    End If

    End Sub

    </script>
    <%
    Dim ad_id
    Dim picnumber
    Dim egsist
    Dim mext
    Dim avviso
    Dim controllo
    Dim adid
    Dim Username


    ad_id = Request.QueryString("ad_id")
    picnumber = Request.QueryString("picnumber")
    egsist = Request.QueryString("egsist")

    randomize()
    upload_ok = false
    if lcase(Request.ServerVariables("REQUEST_METHOD"))=" post" then
    fileFld = request.files(0)
    if fileFld.ContentLength > upload_max_size * 1024 then
    msg = "Attenzione, l'immagine deve essere max " & upload_max_size & "Kb"
    else
    try
    originalImg = System.Drawing.Image.FromStream(fileFld.InputStrea m)
    If (originalImg.Width/Lx) > (originalImg.Width/Ly) Then
    L2 = originalImg.Width
    newWidth = Lx
    newHeight = originalImg.Height * (Lx / L2)
    if newHeight > Ly then
    newWidth = newWidth * (Ly / newHeight)
    newHeight = Ly
    end if
    Else
    L2 = originalImg.Height
    newHeight = Ly
    newWidth = originalImg.Width * (Ly / L2)
    if newWidth > Lx then
    newHeight = newHeight * (Lx / newWidth)
    newWidth = Lx
    end if
    End If
    If (originalImg.Width/Lx2) > (originalImg.Width/Ly2) Then
    L3 = originalImg.Width
    newWidth2 = Lx2
    newHeight2 = originalImg.Height * (Lx2 / L3)
    if newHeight2 > Ly2 then
    newWidth2 = newWidth2 * (Ly2 / newHeight2)
    newHeight2 = Ly2
    end if
    Else
    L3 = originalImg.Height
    newHeight2 = Ly2
    newWidth2 = originalImg.Width * (Ly2 / L3)
    if newWidth2 > Lx2 then
    newHeight2 = newHeight2 * (Lx2 / newWidth2)
    newWidth2 = Lx2
    end if
    End If

    Dim thumb As New Bitmap(newWidth, newHeight)
    Dim nw As New Bitmap(newWidth2, newHeight2)

    Dim gr_dest As Graphics = Graphics.FromImage(thumb)
    Dim gr_dest2 As Graphics = Graphics.FromImage(nw)

    dim sb = new SolidBrush(System.Drawing.Color.White)
    dim sb2 = new SolidBrush(System.Drawing.Color.White)
    gr_dest.FillRectangle(sb, 0, 0, thumb.Width, thumb.Height)
    gr_dest2.FillRectangle(sb2, 0, 0, nw.Width, nw.Height)

    gr_dest.DrawImage(originalImg, 0, 0, thumb.Width, thumb.Height)
    gr_dest2.DrawImage(originalImg, 0, 0, nw.Width, nw.Height)

    try
    Dim strWatermark As String = "TESTO DEL WATERMARK"
    Dim canvas As Graphics = Graphics.FromImage(nw)
    Dim StringSizeF As SizeF, DesiredWidth As Single, wmFont As Font, RequiredFontSize As Single, Ratio As Single
    wmFont = New Font("Tahoma", 6, FontStyle.Bold)
    ' Per modificare le dimensioni della scritta sovraimpressa aumentare o diminuire questa percentuale
    DesiredWidth = nw.Width * .35
    StringSizeF = canvas.MeasureString(strWatermark, wmFont)
    Ratio = StringSizeF.Width / wmFont.SizeInPoints
    RequiredFontSize = DesiredWidth / Ratio
    wmFont = New Font("Verdana", RequiredFontSize, FontStyle.Bold)
    canvas.DrawString(strWatermark, wmFont, New SolidBrush(Color.Beige), 0, 0)
    canvas.DrawString(strWatermark, wmFont, New SolidBrush(Color.FromArgb(128, 0, 0, 0)), 2, 2)
    canvas.DrawString(strWatermark, wmFont, New SolidBrush(Color.FromArgb(128, 255, 255, 255)), 0, 0)
    nw.SetResolution(96, 96)


    fileExt = System.IO.Path.GetExtension(fileFld.FileName).ToLo wer()
    nw.save(Server.MapPath(upload_dir & upload_original & ad_id & "_" & picnumber & fileExt), originalImg.rawformat)
    thumb.save(Server.MapPath(upload_dir & upload_original & ad_id & "_" & picnumber & upload_thumb & fileExt), originalImg.rawformat)
    msg = "Uploaded " & fileFld.FileName & " to " & Server.MapPath(upload_dir & upload_original & fileExt)
    upload_ok = true
    mext = fileExt
    catch
    msg = "Si è verificato un Errore. L'immagine non è stata salvata."
    end try

    if not thumb is nothing then
    thumb.Dispose()
    thumb = nothing
    end if
    if not nw is nothing then
    nw.Dispose ()
    nw = Nothing
    end if
    catch
    msg = "Si è verificato un Errore. L'immagine non è stata elaborata."
    end try
    end if

    if not originalImg is nothing then
    originalImg.Dispose()
    originalImg = nothing
    end if

    end if
    %>
    <html>
    <head>
    <title>Carica Foto, crea Thumbnail, Ridimensiona e aggiunge WATERMARK</title>

    </head>
    <body style="text-align: center">
    <div align="center">
    <table border="1" width="550" id="table1" bordercolorlight="#006633" bordercolordark="#F4F4F4">
    <tr>
    <td>
    <p align="center" style="margin-top: 5px; margin-bottom: 5px"><font face="Tahoma" size="3" color="#006633"><asp:Label ID="Label2" runat="server" Text="" EnableViewState="false"></asp:Label> dell'<asp:Label ID="Label1" runat="server" Text="" EnableViewState="false"></asp:Label></font></p>
    <p style="margin-top: 5px; margin-bottom: 5px">

    <% If upload_ok Then %>
    <input type="hidden" id="picnumber" value="<%=picnumber%>">
    <input type="hidden" id="mext" value="<%=mext%>">
    <input type="hidden" id="Ad_Id" value="<%=Ad_Id%>">

    <% If egsist = "yes" Then %>
    </p>
    <p align="center" style="margin-top: 5px; margin-bottom: 5px"><font color="red" face="Tahoma" color="#000000">
    Attenzione...
    </font></p>
    <p align="center" style="margin-top: 5px; margin-bottom: 5px"><font face="Tahoma" size="2">Con questa operazione
    verrà sovrascritta l'immagine già esistente.</font>
    </p>
    <% End If %>
    <% End If%>

    <form id="form1" enctype="multipart/form-data" method="post" runat="server">
    <div align="center">
    <table>
    <tr><td><font face="Tahoma" size="2" color="#000000">Cerca sul tuo pc l'immagine che vuoi caricare</font>:</td><td><input type="file" name="upload_file"></td></tr>
    <tr><td colspan=2>
    <p align="center"><font face="Tahoma" size="2" color="#AE0427">Dimensioni massime <%=upload_max_size%>Kb, e solo nei formati
    fotografici (gif/jpg/jpeg/bmp/png)</font></td></tr>
    <tr><td colspan=2>
    <p align="center"><input type="submit" value="Invia File" onclick="document.getElementById('attesa').style.v isibility='visible';"></td></tr>
    <tr><td>

    </td></tr>
    </table>
    </div>
    </form>
    <div id="attesa" style="border:2px solid #006633; background-color:white; position: absolute; top: 28px; left: 170px; width: 408px; height: 151px; visibility:hidden" align="center">

    <p align="center" style="margin-top: 3px; margin-bottom: 5px">
    </p>
    <p align="center" style="margin-top: 3px; margin-bottom: 5px">
    <font face="Tahoma" size="2"> </font></p>
    <p align="center" style="margin-top: 3px; margin-bottom: 5px">
    <font face="Tahoma" size="2"> </font>
    <font face="Tahoma" color="#AE0427">Attendere prego.........</font></p>
    <p align="center" style="margin-top: 3px; margin-bottom: 5px">

    [img]/images/pb_gap.gif[/img]</p>


    </div>
    <%
    if upload_ok then
    Response.Redirect("foto_manager.asp?Ad_Id=" & Ad_Id & "&picnumber=" & picnumber & "&mext=" & mext , true )
    else
    response.write(msg)
    end if
    %>
    </td>
    </tr>
    </table>
    </div>
    </body>
    </html>
    ODIO fare il Debug......Grrrrrr!

  2. #2
    Dimenticavo di scusarmi per gli "orrori" e/o "errori" presenti nel codice. Chiedo venia agli esperti e sono certo che molti lo miglioreranno.
    ODIO fare il Debug......Grrrrrr!

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da override64
    Dimenticavo di scusarmi per gli "orrori" e/o "errori" presenti nel codice. Chiedo venia agli esperti e sono certo che molti lo miglioreranno.
    Ciao
    L'ho provato e funziona, però, visto che hai fatto il lavoro, ti conviene continuarlo.
    Mi permetto di dare le mie impressioni.

    1) Ti conviene togliere il codice da lì e metterlo in una classe o modulo.

    2) Metti come prima istruzione, Option Strict On.
    Questo ti obbligherà a dichiarare esplicitamente il tipo di variabile

    3) separa il codice in procedure più piccole parametrizzate

    per esempio:
    una procedura per leggere/creare la bitmap
    una procedura per salvare la bitmap su file
    una procedura per salvare la bitmap su flusso di uscita
    una procedura per ridimensionare l'immagine
    una procedura per scrivere sull'immagine
    una procedura per fondere due immagini
    e così di seguito.

    Ciao

    Pietro

  4. #4
    Ciao Pietro,
    i suggerimenti sono sempre ben accetti. Per quanto hai scritto hai ragione e appena avrò terminato il lavoro che sto facendo lo migliorerò. Ad esempio ho in mente di fare in modo che possa gestire l'upload anche di una gif animata, che ha più frames, migliorare la barra di scorrimento e da semplice gif animata farla diventare una vera progress bar, creare un error handler decente. E tutto in un solo file. Presto posterò i miglioramenti.
    A Presto
    N.

    P.S. Anche tu, se hai tempo, mettici le mani.
    ODIO fare il Debug......Grrrrrr!

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.