1
0

Added badge image auto resizing on upload

This commit is contained in:
Michael Gordeev
2020-03-28 18:16:06 +03:00
parent 6c1545b056
commit a137b1a80b
2 changed files with 19 additions and 7 deletions
@@ -5,7 +5,9 @@ using MyWebsite.Controllers;
using MyWebsite.Models; using MyWebsite.Models;
using MyWebsite.Models.Databases; using MyWebsite.Models.Databases;
using System; using System;
using System.Globalization; using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@@ -27,14 +29,24 @@ namespace MyWebsite.Areas.Admin.Controllers
if (badgeImage == null) if (badgeImage == null)
throw new ArgumentNullException(nameof(badgeImage)); throw new ArgumentNullException(nameof(badgeImage));
System.Drawing.Image image = System.Drawing.Image.FromStream(badgeImage.OpenReadStream()); Image image = Image.FromStream(badgeImage.OpenReadStream());
if (System.IO.File.Exists(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName)) if (System.IO.File.Exists(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName))
ModelState.AddModelError("Error", $"Badge image with such name ({badgeImage.FileName}) is already esists"); ModelState.AddModelError("Error", $"Badge image with such name ({badgeImage.FileName}) is already esists");
else if (image.Width != 64 || image.Height != 64 || !badgeImage.FileName.EndsWith(".PNG", true, CultureInfo.InvariantCulture)) else if (image.Width < 64 || image.Width != image.Height || !badgeImage.FileName.EndsWith(".png", StringComparison.OrdinalIgnoreCase))
ModelState.AddModelError("Error", "The file must be EXACTLY 64x64 pixels PNG image"); ModelState.AddModelError("Error", "The file must be PNG image with 1:1 aspect ratio and at least 64x64 pixels");
else else
using (var stream = System.IO.File.Create(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName)) {
badgeImage.CopyTo(stream); using Bitmap resized = new Bitmap(64, 64);
using Graphics graphics = Graphics.FromImage(resized);
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.DrawImage(image, 0, 0, 64, 64);
using FileStream stream = System.IO.File.Create(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName);
resized.Save(stream, ImageFormat.Png);
}
return View(Database.Badges); return View(Database.Badges);
} }
@@ -62,7 +62,7 @@
<label for="badgeImage">Badge image file</label> <label for="badgeImage">Badge image file</label>
<input name="badgeImage" type="file" required /> <input name="badgeImage" type="file" required />
<span> <span>
<b>Note:</b> Image should be exactly 64x64 pixels PNG file <b>Note:</b> Image should PNG file with 1:1 aspect ratio and at least 64x64 pixels
</span> </span>
<br /> <br />
<button>Upload</button> <button>Upload</button>