Vedi la versione completa : Jpeg resize compress on the fly
NEW-SOLUTION
23-07-2006, 12.09.52
Ciao a tutti
sto impazzendo per concludere un progettino molto semplice che permetta di comprimere al volo le immagini e ridimensionarle attraverso la classica querystring. All'inizio ho trovato uno script che ? perfetto per l'utilizzo di GetThumbnailImage attraverso una querystring per altezza e larghezza ma ho notato che la qualit? dell'immagine restituita ? assolutamente disastrosa. Ho quindi capito che devo utilizzare una funzione tipo System.Drawing.Imaging.Encoder.Quality. Ho trovato diversi script, ma nessuno che mi permetta di settare la dimensione finale dell'immagine e la compressione attraverso una querystring tipo
<img src="thb.aspx?filename=nomeimmagine.jpg&width=300&height=225&quality=75" border="0" >
CHISSA' SE QUALCHE ESPERTO PUO' SCRIVERE DUE RIGHE IN PROPOSITO ??
grazie, Max
NEW-SOLUTION
26-07-2006, 12.12.39
In pratica ho scoperto che quando si utilizza per esempio una fotocamera digitale, viene creata l'immagine con incorporati i valori di thumb, cosa che succede anche con la creazione di molti file immagine attraverso soft che girano su microsoft. quindi usando il parametro di asp.net orginalimg.GetThumbnailImage viene in realt? compressa l'immagine attraverso il valore thumb, e quindi su dimensioni tipo 400 x 400 l'immagine ? davvero pietosa....
QUAL'E'ILTRUCCO ?
semplice, sfruttare la funzione di rotazione immagine di asp.net che bypassa ( o elimina, non lo so ) i valori thumb e comprime il file immagine originale.
ECCO DI SEGUITO LO SCRIPT COMPLETO, funziona che ? una meraviglia.
'------------ Creare pagina che si chiama tipo thb.aspx ----------------
<%@ Import Namespace=System.Drawing %>
<%@ Import Namespace=System %>
<%@ Import Namespace=System.Web %>
<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Dim orginalimg, thumb As System.Drawing.Image
Dim FileName As String
Dim inp As New IntPtr()
Dim width, height As Integer
Dim rootpath As String
rootpath = Server.MapPath("/") ' Get Root Application Folder
FileName = rootpath & Request.QueryString("FileName") ' Root Folder + FileName
Try
orginalimg = orginalimg.FromFile(FileName) ' Fetch User Filename
Catch
orginalimg = orginalimg.FromFile(rootpath & "error.gif") ' Fetch error.gif
End Try
' Get width using QueryString.
If Request.QueryString("width") = Nothing Then
width = orginalimg.Width ' Use Orginal Width.
ElseIf Request.QueryString("width") = 0 Then ' Assign default width of 100.
width = 100
Else
width = Request.QueryString("width") ' Use User Specified width.
End If
' Get height using QueryString.
If Request.QueryString("height") = Nothing Then
height = orginalimg.Height ' Use Orginal Height.
ElseIf Request.QueryString("height") = 0 Then ' Assign default height of 100.
height = 100
Else
height = Request.QueryString("height") ' Use User Specified height.
End If
orginalimg.RotateFlip(RotateFlipType.Rotate180Flip None)
orginalimg.RotateFlip(RotateFlipType.Rotate180Flip None)
thumb = orginalimg.GetThumbnailImage(width, height, Nothing, inp)
' Sending Response JPEG type to the browser.
Response.ContentType = "image/jpeg"
thumb.Save(Response.OutputStream, Imaging.ImageFormat.Jpeg)
' Disposing the objects.
orginalimg.Dispose()
thumb.Dispose()
End Sub
</script>
</html>
'------------ inserire il tag immagine nella pagina desiderata ( .asp, .aspx e tutto ci? che giri su server win e che sia compatibile con aspx )
es.
<IMG src="thb.aspx?filename=nomeimmagine.jpg&width=60&height=45" border=1>
ed il gioco ? fatto. ? quindi possibile modificare le dimensioni di una sola immagine pi? volte on the fly.
SPERO SIA DI AIUTO.
ciao a tutti, Max
www.new-solution.net
vBulletin® v3.8.2, Copyright ©2000-2010, Jelsoft Enterprises Ltd.