Ridimensionare le immagini con ASP.NET

di Daniele Bochicchio, in ASP.NET, System.Drawing, System.Drawing.Imaging,

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 immagini
https://www.aspitalia.com/liste/usag/script.aspx?ID=501

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi