Changelog
All notable changes to NetVips will be documented in this file. See here for the changes to the pre-compiled binaries of libvips.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
3.1.0 - 2025-06-07
Added
- Add missing revalidateoption toImage.NewFromFile().
Changed
- Update methods/enums for libvips 8.17.
Removed
- Remove redundant revalidateoption from source and buffer loaders.
3.0.1 - 2025-04-16
Changed
- Increase severity of native library load failures.
Fixed
- Load the correct library on all Apple platforms (#240).
- Allow ModuleInitializer.Initialize()to be called multiple times.
- Fix image.AddAlpha()on some platforms.
3.0.0 - 2024-10-29
Added
- Add support for a single shared libvips binary on Windows (#211).
- Add ReadOnlySpan<T>/ReadOnlyMemory<T>overloads (#225).
Changed
- Update methods/enums for libvips 8.16.
Removed
- Drop support for .NET Standard 2.0 and Mono. NetVips now targets .NET 6 (net6.0) and .NET Framework 4.5.2 (net452) moving forward. See https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/ for more information.
- Remove deprecated utilities.
2.4.2 - 2024-10-13
Fixed
- Fix incorrect progress reporting on Linux (#237).
- Fix image.AddAlpha()with libvips 8.16.
2.4.1 - 2024-03-24
Fixed
- Avoid key collision during shared VOptionmerge (#228).
2.4.0 - 2023-11-12
Changed
- Update methods/enums for libvips 8.15.
Fixed
- Ensure correct calling convention for unmanaged-to-managed callbacks.
2.3.1 - 2023-06-29
Fixed
- Ensure Image.FindLoad()works on UTF-8 strings (#210).
2.3.0 - 2023-03-24
Added
- Add IntPtr-based overload for Image.NewFromMemory()(#177).
- Add image.Invalidate()to drop caches on an image, and any downstream images.
- Add NetVips.Shutdown()to finalize the internal leak checker and profiler.
Changed
- Update methods/enums for libvips 8.14.
- The NetVips.Extensions package is now only supported on Windows when targeting .NET 6.0 or higher. See https://aka.ms/systemdrawingnonwindows for more information.
Fixed
- Ensure compatibility with FreeBSD and variants.
- Ensure code is AOT-friendly (#196).
2.2.0 - 2022-07-25
Added
- Add NetVips.BlockUntrusted()andOperation.Block()for blocking operations at runtime.
- Add image.SignalHandlersDisconnectByFunc()andimage.SignalHandlersDisconnectByData()for disconnecting signal handlers that match.
- Implement image.OnPostCloseremove event accessor.
Changed
- Update methods/enums for libvips 8.13.
- Avoid throwing general exceptions.
- Ensure debug and unit tests functions are internal.
Fixed
- Use the correct type for signal handler IDs.
Removed
- Remove internal VipsSaveableenum.
2.1.0 - 2021-12-02
Added
- Add image.SignalHandlerDisconnect()for disconnecting a signal handler.
Changed
- Update methods/enums for libvips 8.12.
- Drop internal ModuleInit.Fodydependency in favor of the[ModuleInitializer]attribute.
- image.WriteToBuffer()tries to use the new target API first.
- Bump minimum required .NET Framework version to v4.5.2.
- The NetVips.Extensions package is now attributed as a Windows-specific library when targeting .NET 6.0 or higher. See https://aka.ms/systemdrawingnonwindows for more information.
Fixed
- Ensure recorded delegates are not released too early (#141).
2.0.1 - 2021-06-23
Changed
- Update methods/enums for libvips 8.11.
- Avoid using Span<T>throughout the codebase (#131).
Fixed
- Ensure strings are null-terminated (#131).
2.0.0 - 2021-03-30
Added
- Expose "speed" parameter in heifsave to control the CPU effort spent on improving compression (applies to AV1 compression only, see libvips/libvips#1819).
- Add missing ForeignPngFilterenum (#106).
- Add missing image.AddAlpha()operation (#116).
- Add image.Mutate()function for creating anMutableImage(#119).
Changed
- Move cache/statistics helpers to dedicated classes (#98).
- Use enumerations where possible (#112).
- Methods which modify the image, such as setting or removing metadata requires an MutableImage(seeimage.Mutate()).
Fixed
- Ensure images are disposed early throughout the codebase (#114).
1.2.4 - 2020-07-13
Changed
- Update methods/enums for libvips 8.10.
1.2.3 - 2020-06-21
Added
- Add support for a single shared libvips binary on Linux and macOS (#83).
1.2.2 - 2020-06-16
Changed
- Free the associated streams within Image.*loadStream()andimage.*saveStream()earlier (#78).
- Speed-up UTF8 string marshalling by using System.Buffers.ArrayPool.
Fixed
- Fix the buffer-based fallback mechanism for Image.NewFromStream()andImage.NewFromSource()on Windows 32-bit.
1.2.1 - 2020-03-16
Changed
- Update enums.
Fixed
- Fix a bug that freed the stream within Image.NewFromStream()too early (#58).
1.2.0 - 2020-01-30
Added
- Add support for true streaming (#33).
- A new NetVips.Extensions package containing useful helpers (#41).
- Add Image.Switch(),image.Case()andimage.NewFromMemoryCopy()operations.
- Add support for the short-circuit operators (&&and||).
- Add Enums.SignalsandImage.EvalDelegatethat can be used withimage.SignalConnect().
- Add image.RefCount()to get the reference count of an image.
- Add NetVips.GetOperations()to get a list of operations available within the libvips library.
- Add VipsProgressstruct to the public API.
- Add image.WriteToMemory(out ulong)to write the image to an unformatted C-style array.- This is a low-level operation, make sure you free the returned memory with NetVips.Free().
 
- This is a low-level operation, make sure you free the returned memory with 
Changed
- The image.SetType()function has been renamed toimage.Set().
- The Image.Sum()function uses the params keyword.
- Speed-up Operation.Call().
- Free the VipsOperationpointers withinOperation.Call()earlier (#53).
- Unset the GValuewithinVipsObject.Set()andVipsObject.Get()earlier.
- The internal function Operation.GenerateImageClass()has moved to the samples directory.
1.1.0 - 2019-07-29
Added
- A new NetVips.Native package containing the pre-compiled libvips binaries for Linux, macOS and Windows (#21).
- Changes to the NetVips.Native.* packages will be documented here.
 
- Add NetVips.GetSuffixes()to get a list of all the filename suffixes supported by libvips (libvips/ruby-vips#186).
- Add support for progress feedback (image.SetProgress()) and signal handling (image.SignalConnect()) (#31).
- Add image.SetKill()andimage.IsKilled()(#31, libvips/libvips@91d0e7e).
- Add NetVips.ProfileSet(),NetVips.VectorSet(),NetVips.ConcurrencySet()andNetVips.ConcurrencyGet()utilities.
- Add support for loading and saving from and to streams (Image.NewFromStream()andimage.WriteToStream()) (#33).
- Add Regionclass to read pixels from images without storing the entire image in memory.
- Add image[x, y]overload as a synonym forimage.Getpoint(x, y).
- Add missing arithmetic operators (1 - image,1 / image, etc.).
- Add support for identifying image formats (Image.FindLoad(),Image.FindLoadBuffer()andImage.FindLoadStream()) (#37).
- Add image.PageHeightproperty for retrieving the page height for multi-page images.
Changed
- Improve memory management (#26).
- The bundled libvips Windows binaries were moved to the NetVips.Native package.
- Update and improve the NetVips.Benchmarks (#34).
- The overloadable operators ==and!=have been changed toEqualandNotEqualto avoid conflicts withnullchecks.
- Some methods are overloaded instead of defining the parameters as objecttype.
- The base class was renamed from BasetoNetVipsto comply with the C# code conventions.
- The Operation.VipsCacheSet*()utilities has been moved toNetVips.CacheSet*().
- Speed-up Operation.Call()by avoiding unnecessary loops.
- Remove usage of LINQ in several critical paths.
- The composite x and y positions were changed into an array (#39).
Removed
- The UseGlobalLibvipsproperty since the bundled libvips binaries were moved to the NetVips.Native package.
1.0.7 - 2019-01-18
Changed
- Update bundled libvips x86/x64 binary to 8.7.4.
- Speed-up Base.Version()by caching the libvips version as soon as the assembly is loaded.
1.0.6 - 2019-01-10
Added
- The LibvipsOutputBaseproperty to specify the subdirectory (within your project's output directory) where the libvips binaries are copied to (#20).
Changed
- Update bundled libvips x86/x64 binary to 8.7.3.
- No exceptions will be thrown by the ModuleInitializer(used to initialize libvips once the assembly is loaded) (#15, #20).
Removed
- The redundant LibvipsDLLPathproperty.
1.0.5 - 2018-09-25
Added
- Bundle pre-compiled libvips binary and its dependencies for 32-bit Windows.
Changed
- Update bundled libvips binary to 8.7.0.
Fixed
- Fix five small memleaks (libvips/lua-vips#24).
1.0.4 - 2018-06-28
Added
- Add image.Contains()helper (to check if the image contains an property of metadata).
- Support 32-bit architecture (#7).
Changed
- Update bundled libvips binary to 8.6.4.
Fixed
- Fix a bug that freed a string pointer too early (#9).
1.0.3 - 2018-06-06
Added
- Bundle pre-compiled libvips binary and its dependencies for 64-bit Windows (#3).
Changed
- Target .NET Standard 2.0 instead of .NET Core 2.0 (#4).
- Lower the minimum required .NET Framework version to 4.5 (#4).
1.0.2 - 2018-04-23
Added
- Add missing libvips 8.7 methods.
- Add logging handler to log warnings and debug messages from libvips.
Fixed
- Fix a bug that tried to reference an empty pointer.
- Fix a bug that causes libvips arguments to be set incorrectly.
- Fix up memory errors and leaks.
- Prevent the GC from unsetting the gvalue and disposing a delegate prematurely.
1.0.1 - 2018-04-10
Fixed
- Fix reference count bug.
1.0.0 - 2018-04-08
Added
- First release!