All notable changes to the ImageResize package and the ImageResize.ContextMenu app are documented here.
The format is loosely based on Keep a Changelog, and this project adheres to Semantic Versioning.
ImageResizeOptions.MaxSourceBytes— reject source images larger than this cap (default 256 MiB) to mitigate decompression-bomb attacks.IValidateOptions<ImageResizeOptions>with validate-on-start — misconfiguration now fails at startup instead of at first request.Microsoft.SourceLink.GitHub+.snupkgsymbol packages — consumers can step into library source with the debugger.PackageIcon,PackageProjectUrl,EmbedUntrackedSources,PublishRepositoryUrlmetadata on the NuGet package.- XML documentation file shipped alongside the NuGet package (IntelliSense for every public API).
- Request-scope logging with
HttpContext.TraceIdentifierviaILogger.BeginScope. - High-performance logging via
LoggerMessagesource generator on hot middleware paths.
- Cache-key hashing switched from SHA1 to
System.IO.Hashing.XxHash128— significantly faster, not cryptographically constrained. Cache-invalidation note: the on-disk cache layout changes with this release; existing cache files underCacheRootwill be stale and should be deleted (or will simply be ignored and re-created on first access). - ETag generation uses XxHash of
{path, size, lastWriteUtc}instead of SHA1 of the path alone, so revalidation correctly invalidates when the source file changes. catch (Exception)clauses in the middleware and cache writer tightened to specific exception types so that real faults (OOM, cancellation) are no longer swallowed.ConfigureAwait(false)applied to everyawaitin library code (CA2007 clean).- Public parameter
options1renamed toresizeOptionson theIImageCacheandIImageCodecinterfaces.
- Version number displayed in the title bar and in a new About dialog (opened with
F1or the?button). - Drag-and-drop: drop image files onto the window to queue them.
- Real progress bar with elapsed / ETA readout; Cancel button now aborts mid-batch instead of closing the window.
- Parallel batch processing (
Parallel.ForEachAsync, bounded by CPU count) — faster resizes on large batches. - Per-file error isolation: one corrupt image no longer aborts the entire batch.
- Keyboard shortcuts: Enter = Resize, Esc = Cancel, F1 = About, proper Tab order.
- Dark-mode-aware styling using
SystemColors— follows Windows theme. - Unhandled-exception handler writes to the log file and shows a non-blocking error dialog instead of silent crashes.
AutomationProperties.Nameon controls for screen-reader support.
- IPC server no longer silently swallows pipe exceptions (they are now logged).
- IPC client connect timeout raised from 500 ms to 2000 ms, with a fallback notification on exhaustion.
Topmost = true; Topmost = falseflicker on IPC activation replaced with a cleanActivate()call.- Secondary-instance mutex release bug —
ReleaseMutex()is no longer called on an un-owned mutex. WithRetryAsyncis now bounded to five attempts instead of potentially infinite.
Directory.Build.props— single source of truth for version, language, and analyzer level across all projects.Directory.Packages.props— central package version management..editorconfig— consistent formatting, nullability as error, naming rules..github/workflows/build.yml— CI on Ubuntu + Windows, uploads test results and.nupkgartifacts.SECURITY.md,CHANGELOG.md.build-installer.ps1andInstaller.issnow derive the version from the built assembly instead of hard-coding3.0.0.
- First release of the
ImageResizev3 line. - Dropped URL rewriting and masked URLs (deliberately simpler API than v2).
- SkiaSharp 3.119.2, .NET 10, ASP.NET Core middleware with atomic disk cache.
AllowUpscale=falseby default.Cache.MaxCacheBytes = 0means unlimited.- ContextMenu companion app shipped as Windows installer.