SharpPixel.AspNetCore.ImageResizer
2.1.0
See the version list below for details.
dotnet add package SharpPixel.AspNetCore.ImageResizer --version 2.1.0
NuGet\Install-Package SharpPixel.AspNetCore.ImageResizer -Version 2.1.0
<PackageReference Include="SharpPixel.AspNetCore.ImageResizer" Version="2.1.0" />
<PackageVersion Include="SharpPixel.AspNetCore.ImageResizer" Version="2.1.0" />
<PackageReference Include="SharpPixel.AspNetCore.ImageResizer" />
paket add SharpPixel.AspNetCore.ImageResizer --version 2.1.0
#r "nuget: SharpPixel.AspNetCore.ImageResizer, 2.1.0"
#:package SharpPixel.AspNetCore.ImageResizer@2.1.0
#addin nuget:?package=SharpPixel.AspNetCore.ImageResizer&version=2.1.0
#tool nuget:?package=SharpPixel.AspNetCore.ImageResizer&version=2.1.0
SharpPixel.AspNetCore.ImageResizer 🚀
A high-performance, asynchronous, and DoS-protected image resizing middleware for ASP.NET Core built on top of SkiaSharp v3. It intercepts static image requests on-the-fly, processes them based on query parameters, and caches the result for maximum efficiency.
🌟 Features
- High Performance: Powered by SkiaSharp v3 for lightning-fast, native image manipulation.
- DoS Protection: Enforces safety ceilings on dimensions to prevent server resource exhaustion.
- Smart Two-Layer Cache: Combines fast
IMemoryCachewith a persistentDisk Cacheto offload CPU and RAM. - Throttled Midnight Cleaner: An automated background worker (
HostedService) that wakes up at a user-defined hour (e.g., 3 AM) to clean expired files without locking your disk or affecting active users. - Custom Pad Color: Seamlessly fill empty spaces in
padmode using standard HEX codes (e.g.,bg=ff0000). - Next-Gen Formats: Convert legacy images to modern WebP on-the-fly to boost your SEO and load speed.
📦 Installation
Install the package via NuGet CLI:
dotnet add package SharpPixel.AspNetCore.ImageResizer
Or via the Package Manager Console:
Install-Package SharpPixel.AspNetCore.ImageResizer
🚀 Quick Start & Integration
- Configure your Program.cs To activate the image resizing capabilities, register the service and place the middleware in your request pipeline. Note: The middleware must be placed before UseStaticFiles.
using Mind.AspNetCore.ImageResizer;
var builder = WebApplication.CreateBuilder(args);
// Register services with production-ready configurations
builder.Services.AddImageResizer(options =>
{
options.MaxDimension = 3000; // Safety ceiling for width/height (DoS Protection)
options.CacheDuration = TimeSpan.FromDays(7); // Server-side cache lifetime
options.CacheControlHeader = "public, max-age=604800"; // Browser-side cache header (7 Days)
options.CacheFolderName = "_imagecache"; // Directory name inside wwwroot/ContentRoot
// Smart Background Midnight Cleaner Settings
options.EnableBackgroundCleanup = true; // Enable automated disk cleanup
options.ExecutionHour = 3; // Wake up precisely at 3:00 AM
options.UseUtcTime = true; // Use UTC time instead of Server Local Time
options.CleanupBatchSize = 50; // Process files in small safe chunks
options.CleanupThrottleDelayMs = 100; // Rest for 100ms after each batch to prevent Disk I/O spikes
});
var app = builder.Build();
// CRITICAL: Intercept image requests before the static files handler serves them
app.UseImageResizer();
app.UseStaticFiles();
app.MapGet("/", () => "Image Resizer Middleware is active and optimized! ⚡");
app.Run();
Image Resizing Modes & Query Parameters Once the middleware is active, you can dynamically transform any image located inside your wwwroot folder simply by appending query parameters (w, h, mode, quality, format) to its URL.
Here are the visual modes supported by the package:
- Resize by Width Only (w) Maintains the original aspect ratio automatically while scaling the width down to 300px.
<img src="/images/scenery.jpg?w=300" alt="Resized Width" />
- Smart Center Crop (mode=crop)Resizes the image and crops it perfectly into a $400 \times 400$ square from the center, discarding any overflowing edges. Excellent for user avatars!
<img src="/images/avatar.jpg?w=400&h=400&mode=crop" alt="Center Cropped" />
- Padded Fit with Custom Background (mode=pad & bg)
<img src="/images/product.jpg?w=800&h=600&mode=pad&bg=e0e0e0" alt="Padded Product" />
- Format Conversion & Quality Compression (format & quality) Converts the output format on-the-fly to a next-gen format like WebP and drops the compression quality to 60% for extreme web performance optimization.
<img src="/images/banner.png?w=1000&quality=60&format=webp" alt="Optimized WebP" />
Query Reference Table
| Parameter | Allowed Values | Example | Description |
|---|---|---|---|
w |
Integer (up to MaxDimension) |
?w=500 |
Sets the target width in pixels. |
h |
Integer (up to MaxDimension) |
?h=300 |
Sets the target height in pixels. |
mode |
crop | pad |
?mode=crop |
The resizing algorithm/style to apply (crop for smart center crop, pad for padded fit). |
quality |
1 to 100 |
?quality=75 |
Sets the image compression level (lower means smaller file size). |
format |
webp | jpeg | png |
?format=webp |
Forces on-the-fly image format conversion. |
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
MaxDimension |
int |
3000 |
The maximum width or height allowed for a resizing request to avoid DoS attacks. |
CacheDuration |
TimeSpan |
12 Hours |
How long the resized image remains cached on the server disk. |
CacheControlHeader |
string |
public, max-age=43200 |
The standard HTTP header sent to client browsers for client-side caching. |
⭐ Support the Project
If you find this package useful, please consider giving it a Star on GitHub! It helps the project grow and motivates further development.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.