Modificare la qualità di un'immagine JPEG da una pagina ASP.NET

Andrea Zani

di , in UserScript, ASP.NET, System.Drawing,

Il formato grafico JPEG permette di impostare la qualità dell'immagine stessa, particolarità che permette il risparmio della dimensione in bytes dell'immagine con un degrado della qualità. Questa opzione, presente in tutti i programmi di grafica, permette di selezionare tale qualità da una scala che varia da 0 a 100 (0 bassa qualità, 100 immagine di altissima qualità).

Anche in .NET, quando manipoliamo immagini JPEG, possiamo decidere e impostare tale qualità. Lo script successivo carica in memoria un'immagine da una cartella del server e prima della sua visualizzazione modifica la qualità a "50". Invito a provare a modificare la variabile "compressione" per vedere le varie differenze nella visualizzazione dell'immagine e la sua dimensione in bytes.

Tale script è utilizzabile con alcune modifiche anche abbinandolo allo script suggerito da Cristian Civera per l'upload e il controlo delle dimensioni in modo da deciderne la qualità prima della memorizzazione (#446).

<%@ import namespace="System.Drawing" %>
<%@ import namespace="System.Drawing.Imaging" %>
<script language="vb" runat="server">
Private Sub Page_Load()
  dim bm as BitMap
  try
    Response.Clear()
    bm= New Bitmap(Request.MapPath("cartella/immagine.jpg"))
    Dim encParams As EncoderParameters =  New EncoderParameters()
    '0 = minima qualità (immagine molto "sgranata")
    '100 = massima qualità (immagine "perfetta")
    Dim compressione As Integer =  50
    dim encParam as New EncoderParameter(Imaging.Encoder.Quality, compressione)
    encParams.Param(0) = encParam
    Dim imageCodecs() As ImageCodecInfo =  ImageCodecInfo.GetImageEncoders()
    Dim imageCodec As ImageCodecInfo =  Nothing
    Dim i As Integer
    For i = 0 to imageCodecs.Length- 1
      If imageCodecs(i).MimeType="image/jpeg" Then
        imageCodec = imageCodecs(i)
        Exit For
      End If
    Next

    'invio a video
    Response.ContentType="image/jpeg"
    bm.Save(Response.OutputStream, imageCodec, encParams)
  catch
    Response.Write ("Impossibile visualizzare l'immagine!")
  finally
    if not bm is nothing then bm.Dispose()
  end try
  
End Sub
</script>

Approfondimenti

#446 - Upload con ASP.NET di immagini con controllo su content type, dimensione e larghezza/altezza
http://www.aspitalia.com/script/446/Upload-ASP.NET-Immagini-Controllo-Content-Type-Dimensione-Larghezza.aspx