2015-08-09 12 views
7

Qual è il modo migliore per ridimensionare un'immagine caricata in MVC 6? Mi piacerebbe memorizzare più varianti di un'immagine (come piccole, grandi, ecc.) Per poter scegliere quali visualizzare in seguito.Ridimensiona l'immagine caricata in MVC 6

Ecco il mio codice per l'azione.

[HttpPost] 
    public async Task<IActionResult> UploadPhoto() 
    { 
     if (Request.Form.Files.Count != 1) 
      return new HttpStatusCodeResult((int)HttpStatusCode.BadRequest); 

     IFormFile file = Request.Form.Files[0]; 

     // calculate hash 
     var sha = System.Security.Cryptography.SHA256.Create(); 
     byte[] hash = sha.ComputeHash(file.OpenReadStream()); 

     // calculate name and patch where to store the file 
     string extention = ExtentionFromContentType(file.ContentType); 
     if (String.IsNullOrEmpty(extention)) 
      return HttpBadRequest("File type not supported"); 

     string name = WebEncoders.Base64UrlEncode(hash) + extention; 
     string path = "uploads/photo/" + name; 

     // save the file 
     await file.SaveAsAsync(this.HostingEnvironment.MapPath(path)); 
    } 

risposta

4

Suggerisco di utilizzare la libreria del processore di immagini.

http://imageprocessor.org/imageprocessor/

Poi si può solo fare qualcosa sulla falsariga di:

using (var imageFactory = new ImageFactory()) 
using (var fileStream = new FileStream(path)) 
{ 
    file.Value.Seek(0, SeekOrigin.Begin); 

    imageFactory.FixGamma = false; 
    imageFactory.Load(file.Value) 
       .Resize(new ResizeLayer(new Size(264, 176))) 
       .Format(new JpegFormat 
       { 
        Quality = 100 
       }) 
       .Quality(100) 
       .Save(fileStream); 
} 

Dove file.Value è il file che è stato caricato (il flusso) (non so di cosa si tratta in MVC , questo è il codice che uso in un progetto di Nancy)

+0

Grazie! Esattamente quello di cui ho bisogno! –

+0

@Phill Ottimo collegamento, grazie, l'unica cosa che ho trovato per l'immagine vext. Ma la "nuova dimensione" è la parte System.Drawing? – Alex

+0

@voo il Nuget corrente richiede ancora System.Drawing, ma l'API sta cambiando per V2 per eliminare quel vincolo. https://github.com/JimBobSquarePants/ImageProcessor#api-changes – Phill