Releases: libvips/libvips
v8.18.2
Changes since 8.18.1:
- convolution: avoid using unsigned accumulators [nakrovati]
- exif: check ifdN range [trailofbits]
- tiffload: check jpeg and jp2k components [wooseokdotkim]
- uhdrsave: set Q for gainmap recompress, don't chroma subsample RGB gainmaps
- uhdrsave: prevent early unref of image with alpha channel [lovell]
- rad2float: limit band count when converting from radiance [lovell]
- jxlload: check EXIF buffer size before reading header [lovell]
Homebrew has updated, win binaries are here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.18.2
v8.18.1
This release fixes a few reported bugs, plus a lot of bugs found by recent improvements to fuzzing (thanks @dloebl!).
- vector: mask supported Highway targets by builtin targets [kleisauke]
- fix Highway paths on big-endian targets [kleisauke]
- fix build with MSVC [star-hengxing]
- fix compatibility with glibc 2.43 [mtasaka]
- pngload: avoid an expensive check during header read [kleisauke]
- improve vips7 JPEG load compatibility [kleisauke]
- fix saving 3-band MATRIX images [kleisauke]
- uhdrload: expose original gainmap scale factor [lovell]
- uhdrsave: control generated gainmap scale factor [lovell]
- source: guard against length truncation [Niebelungen-D]
- shrinkh: fix possible OOB read in Highway path [dloebl] [kleisauke]
- string_to_array_double: ensure delimiter list is consistent [dloebl] [lovell]
- fix loading/saving of non-8-bit JXL images [DarthSim]
- invertlut: check height before interpolating values [dloebl] [lovell]
- extract: check bounds using unsigned arithmetic [Niebelungen-D] [lovell]
- matrixload: guard against empty and very large inputs [Niebelungen-D] [lovell]
- unpremultiply: check
alpha_bandis in range [Niebelungen-D] [lovell] - maplut: ensure lookup table index is unsigned [dloebl] [lovell]
- fwfft: fix heap-buffer-overflow for single-row images [dloebl]
- draw_flood: reject out-of-bounds start point [dloebl]
- openexrload: fix a leak with invalid images [kleisauke]
- canny: fix UB in atan2 lookup table init [dloebl] [kleisauke]
- conva: guard against divide by zero [kleisauke]
- csvload: check whitespace and separator are ASCII [Niebelungen-D] [lovell]
- bandrank: check
indexis in range [Niebelungen-D] [lovell] - remainder_const: guard against divide by zero [kleisauke]
- vips_window_take: prevent int underflow for small mapped images [jcupitt]
- composite: fix UB (invalid-enum-value) in
->build()[kleisauke] - add: prevent possible int overflow [kleisauke]
- bandmean: prevent possible int overflow [kleisauke]
- fastcor: prevent possible int overflow [kleisauke]
- multiply: prevent possible int overflow [kleisauke]
- subtract: prevent possible int overflow [kleisauke]
- hist_cum: prevent possible int overflow [kleisauke]
- convasep: prevent possible int overflow [kleisauke]
- conva: prevent possible int overflow [kleisauke]
- convi: prevent possible int overflow [kleisauke]
- draw_circle: prevent possible int overflow [kleisauke]
- csvload: guard against negative index access [kleisauke]
- convi: guard against invalid shift [kleisauke]
- nary: guard against empty input [kleisauke]
- maplut: add missing overflow checks [kleisauke]
- jpegsave: fix assert fail when saving 2-band image [kleisauke]
- LabS2LabQ: fix UB (undefined-shift) [kleisauke]
- convasep: use unsigned accumulator where appropriate [kleisauke]
- min: fix possible OOB read with complex images [kleisauke]
- max: fix possible OOB read with complex images [kleisauke]
- guard against dimension overflow [ElhananHaenel] [kleisauke]
- gifload: prevent int overflow on 32-bit platforms [ElhananHaenel] [kleisauke]
- sign: use ready image instead of
unary->in[kleisauke] - statistic: use ready image instead of
statistic->in[kleisauke] - hist_plot: handle near-zero ranges for float images [kleisauke]
- affine: check bounds using unsigned arithmetic [kleisauke]
Windows binaries here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.18.1
v8.18.0
The libvips 8.18 release notes are here:
https://www.libvips.org/2025/12/04/What's-new-in-8.18.html
Notable changes since 8.17:
- add dcrawload, dcrawload_source, dcrawload_buffer: load raw camera files using libraw [lxsameer]
- add magickload_source: load from a source with imagemagick
- add vips__worker_exit(): enables fast threadpool shutdown
- larger mmap windows on 64-bit machines improve random access mode performance for many file formats
- pdfload: control region to be rendered via
page_box[lovell] - system: add "cache" argument
- add vips_image_get_tile_width(), vips_image_get_tile_height(): get tile cache geometry hints [jbaiter]
- add vips_uhdrload(), vips_uhdrload_buffer(), vips_uhdrload_source(): load an UltraHDR image
- add vips_uhdrsave(), vips_uhdrsave_buffer(), vips_uhdrsave_target(): save an UltraHDR image
- fix cpp binding leak [VivitionDeveloper]
- add "gainmap" to VipsKeep
- add vips_image_get_gainmap()
- thumbnail updates gainmaps
- add "bitdepth" to jxlsave
- add "path" option to vipsthumbnail, deprecate "output" option [zjturner]
- add "exact" to webpsave
- add "uhdr2scRGB"
- dzsave has gainmap support
- cpp: add .gainmap(), .set(VImage)
- add support for Oklab and Oklch colourspaces
- add vips_Oklab2XYZ(), vips_XYZ2Oklab()
- add vips_Oklab2Oklch(), vips_OKlch2Oklab()
- add vips_interpretation_bands()
- heifsave: add "tune" parameter
- require C++14 as a minimum standard [kleisauke]
- prefer libpng over spng
Windows binaries here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.18.0
v8.18.0-rc3
Third release candidate for 8.18. The release notes are here:
https://www.libvips.org/2025/12/04/What's-new-in-8.18.html
Notable changes since 8.17:
- add dcrawload, dcrawload_source, dcrawload_buffer: load raw camera files
using libraw [lxsameer] - add magickload_source: load from a source with imagemagick
- add vips__worker_exit(): enables fast threadpool shutdown
- larger mmap windows on 64-bit machines improve random access mode for many
file formats - pdfload: control region to be rendered via
page_box[lovell] - system: add "cache" argument
- add vips_image_get_tile_width(), vips_image_get_tile_height(): get tile
cache geometry hints [jbaiter] - add vips_uhdrload(), vips_uhdrload_buffer(), vips_uhdrload_source(): load an
UltraHDR image - add vips_uhdrsave(), vips_uhdrsave_buffer(), vips_uhdrsave_target(): save an
UltraHDR image - fix cpp binding leak [VivitionDeveloper]
- add "gainmap" to VipsKeep
- add vips_image_get_gainmap()
- thumbnail updates gainmaps
- add "bitdepth" to jxlsave
- add "path" option to vipsthumbnail, deprecate "output" option [zjturner]
- add "exact" to webpsave
- add "uhdr2scRGB"
- dzsave has gainmap support
- cpp: add .gainmap(), .set(VImage)
- add support for Oklab and Oklch colourspaces
- add vips_Oklab2XYZ(), vips_XYZ2Oklab()
- add vips_Oklab2Oklch(), vips_OKlch2Oklab()
- add vips_interpretation_bands()
- heifsave: add "tune" parameter
- require C++14 as a minimum standard [kleisauke]
- prefer libpng over spng
Test windows binaries (for rc2) here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.18.0-rc2
v8.18.0-rc2
Second release candidate for 8.18. The release notes are here:
https://www.libvips.org/2025/12/04/What's-new-in-8.18.html
Notable changes since 8.17:
- add dcrawload, dcrawload_source, dcrawload_buffer: load raw camera files
using libraw [lxsameer] - add magickload_source: load from a source with imagemagick
- add vips__worker_exit(): enables fast threadpool shutdown
- larger mmap windows on 64-bit machines improve random access mode for many
file formats - pdfload: control region to be rendered via
page_box[lovell] - system: add "cache" argument
- add vips_image_get_tile_width(), vips_image_get_tile_height(): get tile
cache geometry hints [jbaiter] - add vips_uhdrload(), vips_uhdrload_buffer(), vips_uhdrload_source(): load an
UltraHDR image - add vips_uhdrsave(), vips_uhdrsave_buffer(), vips_uhdrsave_target(): save an
UltraHDR image - fix cpp binding leak [VivitionDeveloper]
- add "gainmap" to VipsKeep
- add vips_image_get_gainmap()
- thumbnail updates gainmaps
- add "bitdepth" to jxlsave
- add "path" option to vipsthumbnail, deprecate "output" option [zjturner]
- add "exact" to webpsave
- add "uhdr2scRGB"
- dzsave has gainmap support
- cpp: add .gainmap(), .set(VImage)
- add support for Oklab and Oklch colourspaces
- add vips_Oklab2XYZ(), vips_XYZ2Oklab()
- add vips_Oklab2Oklch(), vips_OKlch2Oklab()
- add vips_interpretation_bands()
- heifsave: add "tune" parameter
- require C++14 as a minimum standard [kleisauke]
- prefer libpng over spng
v8.18.0-rc1
First release candidate for 8.18. The release notes are here:
https://www.libvips.org/2025/12/04/What's-new-in-8.18.html
Notable changes since 8.17:
- add dcrawload, dcrawload_source, dcrawload_buffer: load raw camera files
using libraw [lxsameer] - add magickload_source: load from a source with imagemagick
- add vips__worker_exit(): enables fast threadpool shutdown
- larger mmap windows on 64-bit machines improve random access mode for many
file formats - pdfload: control region to be rendered via
page_box[lovell] - system: add "cache" argument
- add vips_image_get_tile_width(), vips_image_get_tile_height(): get tile
cache geometry hints [jbaiter] - add vips_uhdrload(), vips_uhdrload_buffer(), vips_uhdrload_source(): load an
UltraHDR image - add vips_uhdrsave(), vips_uhdrsave_buffer(), vips_uhdrsave_target(): save an
UltraHDR image - fix cpp binding leak [VivitionDeveloper]
- add "gainmap" to VipsKeep
- add vips_image_get_gainmap()
- thumbnail updates gainmaps
- add "bitdepth" to jxlsave
- add "path" option to vipsthumbnail, deprecate "output" option [zjturner]
- add "exact" to webpsave
- add "uhdr2scRGB"
- dzsave has gainmap support
- cpp: add .gainmap(), .set(VImage)
- add support for Oklab and Oklch colourspaces
- add vips_Oklab2XYZ(), vips_XYZ2Oklab()
- add vips_Oklab2Oklch(), vips_OKlch2Oklab()
- add vips_interpretation_bands()
- heifsave: add "tune" parameter
- require C++14 as a minimum standard [kleisauke]
- prefer libpng over spng
v8.17.3
Changes since 8.17.2:
- tiffsave: fix saved resolution with a non-default resolution-unit metadata
item [machur] - svgload: ensure short/malformed compressed input is ignored [kleisauke,lovell]
- dzsave: Zoomify: ensure correct tile count in ImageProperties.xml [kleisauke]
- VipsSaveable: reimplement with macros to help C++ compat [jcupitt]
Windows binaries here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.17.3
v8.17.2
Changes since 8.17.1:
- rank: fix an off-by-one error [larsmaxfield]
- popplerload, svgload: validate page size [Yang Luo]
- pdfiumload: allow both dpi and scale to be set [kleisauke]
- svgload: honor DPI when scaling elements with non-pixel units [kleisauke]
- disable redundant Highway AVX512 targets [kleisauke]
- openslideload_source: flag operation as "nocache" [kleisauke]
- remove
vipsprofile.1man page from install [kleisauke] - tiffload: ensure processing halts for memory-related errors [lovell]
- tiffload: increase memory limit from 20MB to 50MB [lovell]
- fix vapi build [stydxm]
- tiffsave: include sample format when copying tiff data [manthey]
Windows binaries here:
https://github.com/libvips/build-win64-mxe/releases/tag/v8.17.2
v8.18.0-alpha2
Changes since alpha1:
- system: add "cache" argument
- add vips_image_get_tile_width(), vips_image_get_tile_height(): get tile cache geometry hints [jbaiter]
A test release to help nip4 betas.
v8.18.0-alpha1
A test release for nip4 development.
Changes since 8.17.0:
- add dcrawload, dcrawload_source, dcrawload_buffer: load raw camera files using libraw [lxsameer]
- add magickload_source: load from a source with imagemagick
- add vips__worker_exit(): enables fast threadpool shutdown
- larger mmap windows on 64-bit machines improve random access mode for many file formats
- pdfload: control region to be rendered via
page_box[lovell]