MagicScaler high-performance, high-quality image processing pipeline for .NET
This release resolves a packaging issue from v0.14.1. It contains no code changes. https://github.com/saucecontrol/PhotoSauce/issues/152
Important: All previous codec plugin packages are incompatible with this new release. New versions of all codec plugins are available, as detailed below. Make sure you have the "include prerelease" checkbox checked if using the NuGet Package Manager UI to update.
IMultiFrameDecoderOptions
https://github.com/saucecontrol/PhotoSauce/issues/151
Stream
.MagicImageProcessor.BuildPipeline
no longer force conversion to sRGB by default. You can use the ColorPofileMode.ConvertToSrgb
setting to force the old behavior if necessary.lcms2.dll
does not ship in the package. https://github.com/saucecontrol/PhotoSauce/discussions/128
TargetFramework
version that is no longer supported will now generate a warning. Because MagicScaler ships with a netstandard2.1
binary, it will still work on these platforms, but it will use non-hardware-accelerated fallback code. The warning makes it clear when this is happening and can be disabled if necessary.libheif
and its frame decoders (libde265
and dav1d
) to the latest versions.ftyp
signatures that may be found in valid HEIC/AVIF files.libheif
https://github.com/strukturag/libheif/issues/1131. These cases will now return a decode error.libjpeg-turbo
to latest version.libpng
to latest version.GIFLIB
to latest version.libjxl
to latest version.libjxl
's default of 7
.PhotoSauce.MagicScaler.GdsMitigationsDisabled
AppContext switch, will restore the Gather-based implementations.PlanarEncoderInfo
is now public, for use in configuring defaults for JPEG and WebP encoders. https://github.com/saucecontrol/PhotoSauce/issues/133
IIccColorProfileSource
and IExifSource
metadata interfaces to allow codec authors to make this metadata available to the MagicScaler pipeline.TransformFactory
class in the PhotoSauce.MagicScaler.Experimental
namespace, which allows for advanced use of some of MagicScaler's internal transform implementations. This API was added specifically to support Paint.NET, and as the namespace implies, it is experimental and subject to change on a whim. If anyone else finds the experimental features useful, please speak up in a discussion, or risk losing them.Notice: This release contains breaking API changes.
netcoreapp3.1
, which is now out of support by Microsoft.libwebp
codec package to latest version. https://github.com/saucecontrol/PhotoSauce/issues/123
⚠ The previous version contains a critical security vulnerability ⚠libjpeg
codec package to latest version of libjpeg-turbo
.libpng
codec package to latest version.libheif
codec package to latest version.libjxl
codec package to latest version.This release contains several color management improvements, as detailed in https://github.com/saucecontrol/PhotoSauce/issues/105
This version marks the first release with near-complete functionality on Linux. Linux use requires registration of one or more native codecs.
ProcessImageSettings
instances to be mutated, which may have resulted in issues when using a single settings object for multiple processing operations.libjpeg-turbo
plugin with significantly improved performance over WIC's JPEG codec and support for progressive JPEG encoding.libpng
plugin with support for APNG (decode enabled by default).GIFLIB
plugin.libwebp
to latest version and improved animation support.libheif
to latest version (resolves a significant performance issue https://github.com/strukturag/libheif/pull/551) and added AVIF decoding support #97.libjxl
to latest version.PlatformNotSupportedException
when running on hardware that supports AVX but not AVX2 (only very old Intel Ivy Bridge and Sandy Bridge processors had this configuration).SupportedOSPlatform
attribute to the UseWicCodecs()
extension method to ensure it is only available on Windows targets.ProcessImageSettings.TrySetEncoderFormat
now accepts either MIME type or file extension. Input strings starting with a .
will be interpreted as file extensions, all others will be interpreted as MIME type.ImageFileExtensions
class containing constants for common image file extensions to support the above.ChromaPosition
enum to support additional subsampled chroma locations. The previous 'interstitial' and 'cosited' values have been editor hidden, and the new explicit locations should be used.libheif
plugin. #89libwebp
wrapper with support for lossy, lossless, and animated WebP decoding and encoding. #19UseWebp()
will replace the Windows WebP decoder in the pipeline in addition to registering the new encoder. If you want explicit control over registration and ordering, UseWebp(removeExisting: false)
would match the old behavior.Notice: This release contains breaking API changes. See the list below or the detailed change log #62 for more information.
FileFormat
enum has been deprecated in favor of MIME types in all APIs where it was previously used.ProcessImageSettings
properties have been deprecated in favor of codec-specific option types.MagicImageProcessor
static properties that controlled global settings have been moved to either AppContext
values or codec optionsIImageContainer
and IImageFrame
interfaces have changed, with some of the properties moving to the new codec integration interfaces.netcoreapp2.1
, which is now out of support by Microsoft, and net5.0
which goes out of support next month.CodecManager
allows explicit configuration of encoders and decoders, along with their default codec-specific configurations.IDecoderOptions
and IEncoderOptions
interfaces.ZonePlatePixelSource
.libheif
wrapper capable of decoding Apple HEIC images.libjxl
wrapper to preview JPEG XL support. The underlying native library is quite unstable in this release, so use with extreme care.Stream
implementation to improve on the the buffering in FileStream
.Some default settings have changed and may result in duplicate cache images for source/size combinations. It is recommended you clear your cache when deploying the new release.
BuildPipeline
overload that accepts ReadOnlySpan<byte>
. This was meant to have been removed in the v0.12.0 release.NullReferenceException
when a PixelSource referenced only by a WIC component was garbage collected while still in use #69.IYccImageFrame
sources in video YUV format are now converted correctly to full-range before output regardless of whether they pass through any other filters.netcoreapp3.0
target and replaced it with a netcoreapp3.1
target.NotSupportedException
when processing malformed animated GIFs which contain some frames larger than the Logical Screen Descriptor specifies. These frames will now be cropped to the logical screen size.ArrayPool
array leak in the animated GIF encoder. (ArrayPool
arrays cannot actually be leaked in the traditional memory leak sense, but they become eligible for garbage collection if not returned to the pool, negating the benefit of using the pool for those arrays.)Stream
implementations.ArrayPool
instance. The new pool allows re-use of buffers between 1MiB and 16MiBs.
There are few cases where MagicScaler uses buffers this large, but applications processing animated GIFs or performing orientation correction on large images may benefit. If no large buffers are required, the pool will remain empty. The pool can be disabled by setting the MagicImageProcessor.EnableLargeBufferPool
property if necessary.gAMA
and cHRM
tags along with iCCP
when saving a v2 ICC profile, and Chromium-based web browsers ignore the color profile when gAMA
and/or cHRM
is set, resulting in incorrect display. Setting a v4 ICC profile works as expected.ProcessImageSettings.Calculate
was called before ProcessImage
.EnablePixelSourceStats
is enabled.CropScaleMode.Pad
and the MatteColor
is not compatible with the source image format. https://github.com/saucecontrol/PhotoSauce/issues/59
SkipLocalsInit
functionality from C# 9.Updated to use MagicScaler v0.11.2