Nello script #501 abbiamo visto come creare un handler in grado di ridimensionare al volo le immagini. E' certamente la tecnica migliore, se non fosse che è di difficile implementazione in ambienti di hosting.
Per ovviare al problema è sufficiente quindi creare una pagina, ad esempio img.aspx, che contenga questo codice:
' Import necessari: '<%@ Import Namespace="System.Drawing"%> '<%@ Import Namespace="System.Drawing.Imaging"%> Sub Page_Load() Dim width as Integer = 0 Dim height as Integer = 0 try ' ricava dimensioni dalla richiesta if not Request.QueryString("width") is Nothing Then width = Int32.Parse(Request.QueryString("width")) End if if not Request.QueryString("height") is Nothing Then height = Int32.Parse(Request.QueryString("height")) End if catch ex as Exception End Try ' ridimensiona l'immagine se specificato Dim immagine as String = Server.MapPath(Request("img")) if Not System.Io.File.Exists(immagine) then immagine = Server.MapPath("/immagini/nondisponibile.jpg") end if call ImgRedim(immagine, width, height) ' fermo il resto della risposta Response.End() End Sub ' Funzione di redim Public Sub ImgRedim(immagine as String, width as Integer, height as Integer) Dim bmp as System.Drawing.Bitmap = CType(System.Drawing.Image.FromFile(immagine), System.Drawing.Bitmap) ' c'è da ridimensionare? if width>0 or height>0 then ' se è specificata solo la larghezza, calcola l'altezza if height = 0 Then height = Convert.ToInt32(width / bmp.Width * bmp.Height) End if ' (e viceversa) if width = 0 Then width = Convert.ToInt32(height / bmp.Height * bmp.Width) End if ' creo la Thumbnail con i parametri impostati Dim miniaturabmp as New System.Drawing.Bitmap(bmp, width, height) ' salvo sullo stream di output if immagine.EndsWith(".jpg") Then miniaturabmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) else miniaturabmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif) end if ' pulizia miniaturabmp.Dispose() else ' salvo sullo stream di output if immagine.EndsWith(".jpg") Then bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) else bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif) end if end if ' pulizia finale bmp.Dispose() End Sub
Per usare lo script è sufficiente passare il percorso virtual dell'immagine, ad esempio in questo modo:
<img src="img.aspx?img=/logo/logo.gif">
Approfondimenti
#501 - Un HttpHandler per ridimensionare al volo le immaginihttps://www.aspitalia.com/liste/usag/script.aspx?ID=501
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.