diff --git a/docs/Resources/UserDefault.svg b/docs/Resources/UserDefault.svg
new file mode 100644
index 0000000..57c9718
--- /dev/null
+++ b/docs/Resources/UserDefault.svg
@@ -0,0 +1,375 @@
+
+
+
+
diff --git a/src/Controllers/HomeController.cs b/src/Controllers/HomeController.cs
index 3f4e108..fc3e440 100644
--- a/src/Controllers/HomeController.cs
+++ b/src/Controllers/HomeController.cs
@@ -102,7 +102,7 @@ public class HomeController : Controller
UserModel? user = await _ldap.GetUserByUidAsync(uid, _ldap.UsersAttributes);
if (user is null || user.JpegPhoto is null || user.JpegPhoto == "")
{
- return File("user_default.jpeg", "image/jpeg");
+ return File(ImageHelper.GetDefaultUserImage(size ?? 48), "image/webp");
}
if (size is null)
{
diff --git a/src/Controllers/UsersController.cs b/src/Controllers/UsersController.cs
index 2391301..5e4fd51 100644
--- a/src/Controllers/UsersController.cs
+++ b/src/Controllers/UsersController.cs
@@ -75,7 +75,7 @@ public class UsersController : Controller
string? title = requestModel.Title;
string userPassword = requestModel.UserPassword ?? "";
UserDescription? description = requestModel.Description;
- jpegPhoto ??= Convert.ToBase64String(System.IO.File.ReadAllBytes("wwwroot/user_default.jpeg")); // TODO: cleanup - make this a config setting
+ jpegPhoto ??= ImageHelper.GetDefaultUserImageAsBase64();
string uid = UsersHelper.CreateUsername(requestModel.Cn ?? "", requestModel.Sn ?? "");
title ??= "";
description ??= new() {Address = new(), BirthDate = "", Workplace = "", Groups = []};
diff --git a/src/Helpers/ImageHelper.cs b/src/Helpers/ImageHelper.cs
index e0baa08..b230c87 100644
--- a/src/Helpers/ImageHelper.cs
+++ b/src/Helpers/ImageHelper.cs
@@ -2,6 +2,7 @@ using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Webp;
using SixLabors.ImageSharp.Formats;
using Berufsschule_HAM.Models;
+using SixLabors.ImageSharp.Processing;
namespace Berufsschule_HAM.Helpers;
@@ -30,6 +31,23 @@ public static class ImageHelper
using var image = Image.Load(decoderOptions, inputStream);
+ int minDimension = Math.Min(image.Width, image.Height);
+ var cropRectangle = new Rectangle(
+ (image.Width - minDimension) / 2,
+ (image.Height - minDimension) / 2,
+ minDimension,
+ minDimension);
+
+ image.Mutate(x =>
+ {
+ x.Crop(cropRectangle);
+ x.Resize(new ResizeOptions
+ {
+ Size = new Size(size, size),
+ Mode = ResizeMode.Crop
+ });
+ });
+
using var outputStream = new MemoryStream();
image.Save(outputStream, new WebpEncoder());
result = outputStream.ToArray();
@@ -38,6 +56,16 @@ public static class ImageHelper
return result;
}
+ public static byte[] GetDefaultUserImage(int size = 48)
+ {
+ return ResizeAndConvertToWebp(GetDefaultUserImageAsBase64(), size);
+ }
+
+ public static string GetDefaultUserImageAsBase64()
+ {
+ return Convert.ToBase64String(File.ReadAllBytes("wwwroot/user_default.webp"));
+ }
+
public static async Task PreloadUsers(IEnumerable userModels, UserImagePreloadType? preloadType)
{
if (preloadType is null || preloadType == UserImagePreloadType.None) return;
diff --git a/src/wwwroot/user_default.jpeg b/src/wwwroot/user_default.jpeg
deleted file mode 100644
index 0141c99..0000000
Binary files a/src/wwwroot/user_default.jpeg and /dev/null differ
diff --git a/src/wwwroot/user_default.webp b/src/wwwroot/user_default.webp
new file mode 100644
index 0000000..8f8687d
Binary files /dev/null and b/src/wwwroot/user_default.webp differ