diff --git a/Iceshrimp.Backend/Core/Configuration/Config.cs b/Iceshrimp.Backend/Core/Configuration/Config.cs index 8a70e247..569e6cdd 100644 --- a/Iceshrimp.Backend/Core/Configuration/Config.cs +++ b/Iceshrimp.Backend/Core/Configuration/Config.cs @@ -209,6 +209,8 @@ public sealed class Config [Range(0, 128)] public int ImageProcessorConcurrency { get; init; } = 8; + public int MaxResolutionPx => MaxResolutionMpx * 1000 * 1000; + public string MaxFileSize { get => MaxFileSizeBytes.ToString(); diff --git a/Iceshrimp.Backend/Core/Services/DriveService.cs b/Iceshrimp.Backend/Core/Services/DriveService.cs index 0863707d..312d5f50 100644 --- a/Iceshrimp.Backend/Core/Services/DriveService.cs +++ b/Iceshrimp.Backend/Core/Services/DriveService.cs @@ -261,9 +261,17 @@ public class DriveService( logger.LogDebug("Image is animated, bypassing image processing..."); skipImageProcessing = true; } + else if (ident.Width * ident.Height > storageConfig.Value.MediaProcessing.MaxResolutionPx) + { + logger.LogDebug("Image is larger than {mpx}mpx ({width}x{height}), bypassing image processing...", + storageConfig.Value.MediaProcessing.MaxResolutionMpx, ident.Width, + ident.Height); + skipImageProcessing = true; + } var formats = GetFormats(user, request, skipImageProcessing); - var res = imageProcessor.ProcessImage(buf, ident, request, formats); + + var res = imageProcessor.ProcessImage(buf, ident, request, formats); properties = res; blurhash = res.Blurhash; diff --git a/Iceshrimp.Backend/Core/Services/ImageProcessing/VipsProcessor.cs b/Iceshrimp.Backend/Core/Services/ImageProcessing/VipsProcessor.cs index 83f91920..be9740ac 100644 --- a/Iceshrimp.Backend/Core/Services/ImageProcessing/VipsProcessor.cs +++ b/Iceshrimp.Backend/Core/Services/ImageProcessing/VipsProcessor.cs @@ -1,5 +1,4 @@ using System.Runtime.InteropServices; -using System.Security; using CommunityToolkit.HighPerformance; using Iceshrimp.Backend.Core.Helpers; using NetVips;