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>