在MVC 6中调整上传图像大小的最佳方法是什么?我想存储图像的多个变体(例如小,大等),以便能够选择稍后显示的内容.
这是我的行动代码.
- [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));
- }
解决方法
我建议使用Image Processor库.
http://imageprocessor.org/imageprocessor/
然后你可以做一些事情:
- 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);
- }