Ridimensionare le immagini con .NET

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

Spesso ci capita di dover mettere a disposizione dell'utente pagine web con la possibilità di uploadare immagini, da utilizzare per un profilo o come miniature.
Con Classic ASP bisognava ricorrere a oggetti COM che richiedevano di conseguenza la loro installazione sul server.
Con una piccola funzione scritta in C#, invece, possiamo ridimensionare la nostra immagine da uno stream data di una immagine e salvarla su disco:

private void ResizeAndSave(Stream imgStr,int Width, int Height,string FileName)
{
  //creo il bitmap dallo stream
  System.Drawing.Image bmpStream=System.Drawing.Image.FromStream(imgStr);
  //creo un nuovo bitmap ridimensionandolo
  Bitmap img=new Bitmap(bmpStream,new Size(Width,Height));
  //salvo l'immagine ridimensionata
  img.Save(FileName,System.Drawing.Imaging.ImageFormat.Jpeg);

  Response.Write("fatto!");
}

La funzione accetta 4 parametri:
- lo stream di dati. Uno stream è un flusso di bytes che possono rappresentare files immagini, testo ecc. In questo modo noi possiamo ridimensionare un'immagine uploadata da un utente, o un'immagine prelevata da uno specifico url o un'immagine presente già su disco;
- width e height: rispettivamente la larghezza e l'altezza dell'immagine da salvare;
- fileName: il nome del file con il percorso dell'immagine da salvare.

La funzione crea un oggetto Image da uno stream che rappresenta la nostra immagine. Successivamente crea un oggetto Bitmap, oggetto che eredita da Image, ma ha più funzioni. Il costruttore infatti ci permette di specificare le dimensioni con il risultato che se ne ridimensiona l'immagine originale. Modificando la funzione con un piccolissimo calcolo matematico possiamo trasformare proporzionalmente l'immagine utilizzando le proprietà Width e Height dell'oggetto bmpStream. Con il metodo Save infine salviamo l'immagine.
Il secondo parametro di questa funzione accetta un tipo enum ImageFormat, che ci permette di specificare il formato. Ho scelto Jpeg perché nel mio caso utilizzo immagini fotografiche.

L'esempio completo di utilizzo è contenuto nel file allegato.

Per ridimensionare un'immagine presente su disco basterà utilizzare invece:

FileStream file=new FileStream(nomefile,FileMode.Open);
ResizeAndSave(file,100,50,nuovonome);
file.Close();

Da notare che ci sono vari modi per ridimensionare un'immagine e molte cose interessanti da applicarle ma per il semplice fine ultimo di questo script a mio avviso il codice della funzione è ottimale.

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