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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Utilizzare parametri a livello di controller nel routing di ASP.NET Core
Cache policy su route groups di Minimal API in ASP.NET Core 7
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Sfruttare i tag nell'output cache di ASP.NET Core 7
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Taggare la output cache in base al routing in ASP.NET Core
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Gestire la query string nell'output cache di ASP.NET Core
I più letti di oggi
- Scenari complessi di validazione con FluentValidation su ASP.NET Core
- PWAConf 2020 - Online
- La gestione dei verbi PUT e DELETE in un servizio REST con ASP.NET MVC 2
- Conoscere le informazioni sul device nelle Universal App
- Introduzione a Visual Studio Online
- Le funzionalità di drag and drop di Silverlight 4.0