# Umbraco.Cms.Imaging.ImageSharp2 Image processing library using **ImageSharp 2.x** for backwards compatibility with existing deployments. Use this package only when migrating from older Umbraco versions that depend on ImageSharp 2.x behavior. **Namespace Note**: Uses `Umbraco.Cms.Imaging.ImageSharp` (same as v3 package) for drop-in replacement - no code changes needed when switching. --- ## 1. Architecture **Type**: Class Library (NuGet Package) **Target Framework**: .NET 10.0 **Purpose**: ImageSharp 2.x compatibility layer ### Package Versions (Pinned) ```xml ``` Version constraint `[2.1.11, 3)` means: minimum 2.1.11, below 3.0. ### Project Structure (7 source files) ``` Umbraco.Cms.Imaging.ImageSharp2/ ├── ImageSharpComposer.cs # Auto-registration via IComposer ├── UmbracoBuilderExtensions.cs # DI setup and middleware configuration ├── ConfigureImageSharpMiddlewareOptions.cs # Middleware options (caching, size limits) ├── ConfigurePhysicalFileSystemCacheOptions.cs # File cache location ├── ImageProcessors/ │ └── CropWebProcessor.cs # Custom crop processor with EXIF awareness └── Media/ ├── ImageSharpDimensionExtractor.cs # Extract image dimensions (EXIF-aware) └── ImageSharpImageUrlGenerator.cs # Generate query string URLs ``` --- ## 2. Key Differences from ImageSharp (3.x) | Feature | ImageSharp2 (this) | ImageSharp (3.x) | |---------|-------------------|------------------| | **Package version** | 2.1.11 - 2.x | 3.x+ | | **HMAC signing** | Not supported | Supported | | **WebP default** | Lossy (native) | Lossless (overridden to Lossy) | | **Cache buster param** | `rnd` only | `rnd` or `v` | | **API differences** | `Image.Identify(config, stream)` | `Image.Identify(options, stream)` | | **Size property** | `image.Image.Size()` method | `image.Image.Size` property | ### API Differences in Code **ImageSharpDimensionExtractor** (`Media/ImageSharpDimensionExtractor.cs:31`): ```csharp // v2: Direct method call IImageInfo imageInfo = Image.Identify(_configuration, stream); // v3: Uses DecoderOptions ImageInfo imageInfo = Image.Identify(options, stream); ``` **CropWebProcessor** (`ImageProcessors/CropWebProcessor.cs:67`): ```csharp // v2: Size is a method Size size = image.Image.Size(); // v3: Size is a property Size size = image.Image.Size; ``` ### Missing Features (vs ImageSharp 3.x) 1. **No HMAC request authorization** - `HMACSecretKey` setting is ignored 2. **No `v` cache buster** - Only `rnd` parameter triggers immutable headers 3. **No WebP encoder override** - Uses default Lossy encoding (no configuration needed) --- ## 3. When to Use This Package **Use ImageSharp2 when:** - Migrating from Umbraco versions that used ImageSharp 2.x - Third-party packages have hard dependency on ImageSharp 2.x - Need exact byte-for-byte output compatibility with existing cached images **Use ImageSharp (3.x) when:** - New installations - Need HMAC URL signing for security - Want latest performance improvements --- ## 4. Configuration Same as ImageSharp 3.x. See `/src/Umbraco.Cms.Imaging.ImageSharp/CLAUDE.md` → Section 3 for full configuration details. **Key difference**: `HMACSecretKey` setting exists but is **ignored** in this package (no HMAC support in v2). --- ## Quick Reference ### Essential Commands ```bash # Build dotnet build src/Umbraco.Cms.Imaging.ImageSharp2/Umbraco.Cms.Imaging.ImageSharp2.csproj # Run tests dotnet test tests/Umbraco.Tests.UnitTests/ --filter "FullyQualifiedName~ImageSharp" ``` ### Key Files | File | Purpose | |------|---------| | `Umbraco.Cms.Imaging.ImageSharp2.csproj` | Version constraints (lines 7-8) | | `ConfigureImageSharpMiddlewareOptions.cs` | Size limit enforcement | | `Media/ImageSharpImageUrlGenerator.cs` | URL generation (no HMAC) | ### Switching Between Packages To switch from ImageSharp2 to ImageSharp (3.x): 1. Remove `Umbraco.Cms.Imaging.ImageSharp2` package reference 2. Add `Umbraco.Cms.Imaging.ImageSharp` package reference 3. Clear media cache folder (`~/umbraco/Data/TEMP/MediaCache`) 4. No code changes needed (same namespace) ### Getting Help - **ImageSharp 3.x Documentation**: `/src/Umbraco.Cms.Imaging.ImageSharp/CLAUDE.md` - **Root Documentation**: `/CLAUDE.md` - **SixLabors ImageSharp 2.x Docs**: https://docs.sixlabors.com/ --- **This is a backwards-compatibility package. For new projects, use `Umbraco.Cms.Imaging.ImageSharp` (3.x) instead.**