2015-08-09 15 views
7

Wie kann die Größe eines hochgeladenen Bildes in MVC 6 am besten angepasst werden? Ich möchte mehrere Varianten eines Bildes speichern (z. B. klein, groß usw.), um auszuwählen, welche später angezeigt werden sollen.Größe des hochgeladenen Bildes in MVC 6 ändern

Hier ist mein Code für die Aktion.

[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)); 
    } 

Antwort

4

Ich würde vorschlagen, Bildprozessor-Bibliothek zu verwenden.

http://imageprocessor.org/imageprocessor/

Dann können Sie einfach entlang der Linien von etwas tun:

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); 
} 

Wo file.Value ist Ihre Datei, die hochgeladen wurde (der Strom) (Ich weiß nicht, was es in MVC ist , das ist Code, den ich in einem Nancy-Projekt verwende)

+0

Danke! Genau das, was ich brauche! –

+0

@Phill Großartiger Link, danke, das Einzige, was ich für vNext Image gefunden habe. Aber ist die "neue Größe" der System.Drawing-Teil? – Alex

+0

@voo das aktuelle Nuget erfordert weiterhin System.Drawing, aber die API ändert sich, damit V2 diese Einschränkung löscht. https://github.com/JimBobSquarePants/ImageProcessor#api-changes – Phill

Verwandte Themen