Posto una versione funzionante che genera sempre 3 foto:
1) una miniatura
2) una foto grande con dimensioni originali
3) una foto grande di qualità web
...rispetto alla prima pagina postata ho aggiunto delle varibiabili per la "foto_x_web" facendola salvare nella cartella "public/image/foto":
codice:
<%@ Page Trace="False" Language="vb" aspcompat="true" debug="true" validateRequest="false"%>
<%@ Import Namespace=System.Drawing %>
<%@ Import Namespace=System.Drawing.Imaging %>
<%@ Import Namespace=System %>
<%@ Import Namespace=System.Collections %>
<%@ Import Namespace=System.Web %>
<%@ Import Namespace=System.Web.UI %>
<%@ Import Namespace=System.Web.UI.WebControls %>
<SCRIPT LANGUAGE="VBScript" runat="server">
const Lx = 200 ' max width for miniaturenails
const Ly = 240 ' max height for miniaturenails
Const Lx1 = 800 ' max width for miniaturenails
Const Ly1 = 800 ' max height for miniaturenails
Dim upload_miniature_dir = "public/image/miniature/" ' directory to upload file
Dim upload_foto_dir = "public/image/foto/" ' directory to upload file
Dim upload_foto_x_web_dir = "public/image/foto/" ' directory to upload file
Dim upload_miniature = "_miniatura" ' filename to save miniaturenail as (suffix added by script)
Dim upload_original = ""' filename to save original as (suffix added by script)
Dim upload_foto_x_web = "__foto_x_web" ' filename to save miniaturenail as (suffix added by script)
Const upload_max_size = 10240 ' max size of the upload (KB) note: this doesn't override any server upload limits
Dim sFileName = ""
dim fileExt ' used to store the file extension (saves finding it mulitple times)
dim newWidth, newHeight as integer ' new width/height for the miniaturenail
Dim newWidth1, newHeight1 As Integer ' new width/height for the miniaturenail
dim l2' temp variable used when calculating new size
dim fileFld as HTTPPostedFile' used to grab the file upload from the form
Dim originalimg As System.Drawing.Image ' used to hold the original image
dim msg ' display results
dim upload_ok as boolean' did the upload work ?
</script>
<%
randomize() ' used to help the cache-busting on the preview images
upload_ok = false
if lcase(Request.ServerVariables("REQUEST_METHOD"))="post" then
fileFld = Request.Files(0) ' get the first file uploaded from the form (note:- you can use this to itterate through more than one image)
upload_original = fileFld.FileName
sFileName = Left(upload_original, Len(upload_original) - 4)
if fileFld.ContentLength > upload_max_size * 1024 then
msg = "Sorry, the image must be less than " & upload_max_size & "Kb"
else
try
originalImg = System.Drawing.Image.FromStream(fileFld.InputStream)
' work out the width/height for the miniaturenail. Preserve aspect ratio and honour max width/height
' Note: if the original is smaller than the miniaturenail size it will be scaled up
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
Dim miniature As New Bitmap(newWidth, newHeight)
'Create a graphics object
Dim gr_dest As Graphics = Graphics.FromImage(miniature)
' just in case it's a transparent GIF force the bg to white
dim sb = new SolidBrush(System.Drawing.Color.White)
gr_dest.FillRectangle(sb, 0, 0, miniature.Width, miniature.Height)
'Re-draw the image to the specified height and width
gr_dest.DrawImage(originalImg, 0, 0, miniature.Width, miniature.Height)
'§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
'INIZIO Codice foto x web
If (originalimg.Width / Lx1) > (originalimg.Width / Ly1) Then
l2 = originalimg.Width
newWidth1 = Lx1
newHeight1 = originalimg.Height * (Lx1 / l2)
If newHeight1 > Ly1 Then
newWidth1 = newWidth1 * (Ly1 / newHeight1)
newHeight1 = Ly1
End If
Else
l2 = originalimg.Height
newHeight1 = Ly1
newWidth1 = originalimg.Width * (Ly1 / l2)
If newWidth1 > Lx1 Then
newHeight1 = newHeight1 * (Lx1 / newWidth1)
newWidth1 = Lx1
End If
End If
Dim foto_x_web As New Bitmap(newWidth1, newHeight1)
'Create a graphics object
Dim gr_dest1 As Graphics = Graphics.FromImage(foto_x_web)
' just in case it's a transparent GIF force the bg to white
Dim sb1 = New SolidBrush(System.Drawing.Color.White)
gr_dest1.FillRectangle(sb1, 0, 0, foto_x_web.Width, foto_x_web.Height)
'Re-draw the image to the specified height and width
gr_dest1.DrawImage(originalimg, 0, 0, foto_x_web.Width, foto_x_web.Height)
'FINE Codice foto x web
'§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
try
fileExt = System.IO.Path.GetExtension(fileFld.FileName).ToLower()
originalimg.Save(Server.MapPath(upload_foto_dir & sFileName & fileExt), originalimg.RawFormat)
miniature.Save(Server.MapPath(upload_miniature_dir & sFileName & upload_miniature & fileExt), originalimg.RawFormat)
foto_x_web.Save(Server.MapPath(upload_foto_x_web_dir & sFileName & upload_foto_x_web & fileExt), originalimg.RawFormat)
msg = "Uploaded " & fileFld.FileName & " to " & Server.MapPath(upload_miniature_dir & sFileName & fileExt)
upload_ok = true
catch
msg = "Sorry, there was a problem saving the image."
end try
' Housekeeping for the generated miniaturenail
if not miniature is nothing then
miniature.Dispose()
miniature = Nothing
foto_x_web.Dispose()
foto_x_web = Nothing
end if
catch
msg = "Sorry, that was not an image we could process."
end try
end if
' House Keeping !
if not originalImg is nothing then
originalImg.Dispose()
originalImg = nothing
end if
end if
%>
<html>
<head>
<title>ASP.NET File Upload and Resize Sample</title>
<META NAME="Description" CONTENT="ASP.NET File Upload and Resize Sample (Hybrid VB.NET)">
<META NAME="Keywords" CONTENT="ASP.NET, ASP, NET, VB, VBScript, Image, Upload, Resize, miniaturenail, Constrain, Filesize, File, Size, Free">
<META NAME="Copyright" CONTENT="Rufan-Redi Pty Ltd 2005">
<META NAME="Author" CONTENT="System developed by Jeremy at http://www.Rufan-Redi.com">
<style type="text/css">
.style1 {
width: 144px;
}
</style>
</head>
<body>
<form id="Form1" enctype="multipart/form-data" method="post" runat="server">
<table>
<tr><td class="style1">Seleziona un'immagine:</td><td>
<input type="file" name="upload_file"
id="upload_file" title="upload_file"></td></tr>
<tr><td colspan=2>Max upload size <%=upload_max_size%>Kb, gif/jpg/png only</td></tr>
<tr><td colspan=2><input type="submit" value="Upload"></td></tr>
</table>
</form>
<% if upload_ok then %>
<table>
<tr>
<td valign=top>[img]<%=upload_foto_x_web_dir & sFileName & fileExt & [/img]"></td>
<td valign=top>[img]<%=upload_miniature_dir & sFileName & upload_miniature & fileExt & [/img]"></td>
</tr>
</table>
<%
else
response.write(msg)
end if
%>
</body>
</html>
Il mio prossimo obiettivo è collegare questa pagina ad una connessione per db access ma aspetto le risposte alle prime due domande x vedere se si può implementare il codice in altro modo!