sharp/docs/changelog.md
Lovell Fuller f7da2e5970 Building from source now requires node-addon-api in dependencies
If you want to build sharp from source against a globally-installed
libvips then you will now need to add both node-addon-api and
node-gyp to the dependencies section of your package.json file.

The binding.gyp file is "hidden" inside the src directory to
prevent various build and package manager tooling from assuming
that everyone is going to build from source every time.
2023-10-08 15:39:02 +01:00

69 KiB

Changelog

v0.33 - gauge

Requires libvips v8.14.5

v0.33.0 - TBD

  • Drop support for Node.js 14 and 16, now requires Node.js >= 18.17.0

  • Prebuilt binaries distributed via npm registry and installed via package manager.

  • Building from source requires dependency on node-addon-api.

  • Remove sharp.vendor.

  • Make compression option of heif mandatory to help reduce HEIF vs HEIC confusion. #3740

  • Ensure correct interpretation of 16-bit raw input. #3808

v0.32 - flow

Requires libvips v8.14.5

v0.32.6 - 18th September 2023

  • Upgrade to libvips v8.14.5 for upstream bug fixes.

  • Ensure composite tile images are fully decoded (regression in 0.32.0). #3767

  • Ensure withMetadata can add ICC profiles to RGB16 output. #3773

  • Ensure withMetadata does not reduce 16-bit images to 8-bit (regression in 0.32.5). #3773

  • TypeScript: Add definitions for block and unblock. #3799 @ldrick

v0.32.5 - 15th August 2023

  • Upgrade to libvips v8.14.4 for upstream bug fixes.

  • TypeScript: Add missing WebpPresetEnum to definitions. #3748 @pilotso11

  • Ensure compilation using musl v1.2.4. #3755 @kleisauke

  • Ensure resize with a fit of inside respects 90/270 degree rotation. #3756

  • TypeScript: Ensure minSize property of WebpOptions is boolean. #3758 @sho-xizz

  • Ensure withMetadata adds default sRGB profile. #3761

v0.32.4 - 21st July 2023

  • Upgrade to libvips v8.14.3 for upstream bug fixes.

  • Expose ability to (un)block low-level libvips operations by name.

  • Prebuilt binaries: restore support for tile-based output. #3581

v0.32.3 - 14th July 2023

  • Expose preset option for WebP output. #3639

  • Ensure decoding remains sequential for all operations (regression in 0.32.2). #3725

v0.32.2 - 11th July 2023

  • Limit HEIF output dimensions to 16384x16384, matches libvips.

  • Ensure exceptions are not thrown when terminating. #3569

  • Ensure the same access method is used for all inputs (regression in 0.32.0). #3669

  • Improve detection of jp2 filename extensions. #3674 @bianjunjie1981

  • Guard use of smartcrop premultiplied option to prevent warning (regression in 0.32.1). #3710

  • Prevent over-compute in affine-based rotate before resize. #3722

  • Allow sequential read for EXIF-based auto-orientation. #3725

v0.32.1 - 27th April 2023

  • Add experimental unflatten operation. #3461 @antonmarsden

  • Ensure use of flip operation forces random access read (regression in 0.32.0). #3600

  • Ensure linear operation works with 16-bit input (regression in 0.31.3). #3605

  • Install: ensure proxy URLs are logged correctly. #3615 @TomWis97

  • Ensure profile-less CMYK to CMYK roundtrip skips colourspace conversion. #3620

  • Add support for modulate operation when using non-sRGB pipeline colourspace. #3620

  • Ensure trim operation works with CMYK images (regression in 0.31.0). #3636

  • Install: coerce libc version to semver. #3641

v0.32.0 - 24th March 2023

  • Default to using sequential rather than random access read where possible.

  • Replace GIF output optimise / optimize option with reuse.

  • Add progressive option to GIF output for interlacing.

  • Add wrap option to text image creation.

  • Add formatMagick property to metadata of images loaded via *magick.

  • Prefer integer (un)premultiply for faster resizing of RGBA images.

  • Add ignoreIcc input option to ignore embedded ICC profile.

  • Allow use of GPS (IFD3) EXIF metadata. #2767

  • TypeScript definitions are now maintained and published directly, deprecating the @types/sharp package. #3369

  • Prebuilt binaries: ensure macOS 10.13+ support, as documented. #3438

  • Prebuilt binaries: prevent use of glib slice allocator, improves QEMU support. #3448

  • Add focus point coordinates to output when using attention based crop. #3470 @ejoebstl

  • Expose sharp version as sharp.versions.sharp. #3471

  • Respect fastShrinkOnLoad resize option for WebP input. #3516

  • Reduce sharpen sigma maximum from 10000 to 10. #3521

  • Add support for ArrayBuffer input. #3548 @kapouer

  • Add support to extend operation for extendWith to allow copy/mirror/repeat. #3556 @janaz

  • Ensure all async JS callbacks are wrapped to help avoid possible race condition. #3569

  • Prebuilt binaries: support for tile-based output temporarily removed due to licensing issue. #3581

  • Add support to normalise for lower and upper percentiles. #3583 @LachlanNewman

v0.31 - eagle

Requires libvips v8.13.3

v0.31.3 - 21st December 2022

  • Add experimental support for JPEG-XL images. Requires libvips compiled with libjxl. #2731

  • Add runtime detection of V8 memory cage, ensures compatibility with Electron 21 onwards. #3384

  • Expose interFrameMaxError and interPaletteMaxError GIF optimisation properties. #3401

  • Allow installation on Linux with glibc patch versions e.g. Fedora 38. #3423

  • Expand range of existing sharpen parameters to match libvips. #3427

  • Prevent possible race condition awaiting metadata of Stream-based input. #3451

  • Improve extractChannel support for 16-bit output colourspaces. #3453

  • Ignore sequentialRead option when calculating image statistics. #3462

  • Small performance improvement for operations that introduce a non-opaque background. #3465

  • Ensure integral output of linear operation. #3468

v0.31.2 - 4th November 2022

  • Upgrade to libvips v8.13.3 for upstream bug fixes.

  • Ensure manual flip, rotate, resize operation ordering (regression in 0.31.1) #3391

  • Ensure auto-rotation works without resize (regression in 0.31.1) #3422

v0.31.1 - 29th September 2022

  • Upgrade to libvips v8.13.2 for upstream bug fixes.

  • Ensure close event occurs after end event for Stream-based output. #3313

  • Ensure limitInputPixels constructor option uses uint64. #3349 @marcosc90

  • Ensure auto-rotation works with shrink-on-load and extract (regression in 0.31.0). #3352

  • Ensure AVIF output is always 8-bit. #3358

  • Ensure greyscale images can be trimmed (regression in 0.31.0). #3386

v0.31.0 - 5th September 2022

  • Drop support for Node.js 12, now requires Node.js >= 14.15.0.

  • GIF output now re-uses input palette if possible. Use reoptimise option to generate a new palette.

  • Add WebP minSize and mixed options for greater control over animation frames.

  • Remove previously-deprecated WebP reductionEffort and HEIF speed options. Use effort to control these.

  • The flip and flop operations will now occur before the rotate operation.

  • Improve normalise operation with use of histogram. #200

  • Use combined bounding box of alpha and non-alpha channels for trim operation. #2166

  • Add Buffer and Stream support to tile-based output. #2238

  • Add input fileSuffix and output alias to format information. #2642

  • Re-introduce support for greyscale ICC profiles (temporarily removed in 0.30.2). #3114

  • Add support for WebP and PackBits compression options with TIFF output. #3198

  • Ensure OpenSlide and FITS input works with custom libvips. #3226

  • Ensure trim operation is a no-op when it would reduce an image to nothing. #3223

  • Expose vips_text to create an image containing rendered text. #3252 @brahima

  • Ensure only properties owned by the withMetadata EXIF Object are parsed. #3292

  • Expand linear operation to allow use of per-channel arrays. #3303 @antonmarsden

  • Ensure the order of rotate, resize and extend operations is respected where possible. Emit warnings when previous calls in the same pipeline will be ignored. #3319

  • Ensure PNG bitdepth can be set for non-palette output. #3322

  • Add trim option to provide a specific background colour. #3332 @mart-jansink

  • Ensure resized image is unpremultiplied before composite. #3334

v0.30 - dresser

Requires libvips v8.12.2

v0.30.7 - 22nd June 2022

v0.30.6 - 30th May 2022

  • Allow values for limitInputPixels larger than 32-bit. #3238

  • Ensure brew-installed vips can be detected (regression in 0.30.5). #3239

v0.30.5 - 23rd May 2022

  • Install: pass PKG_CONFIG_PATH via env rather than substitution. @dwisiswant0

  • Add support for --libc flag to improve cross-platform installation. #3160 @joonamo

  • Allow installation of prebuilt libvips binaries from filesystem. #3196 @ankurparihar

  • Fix rotate-then-extract for EXIF orientation 2. #3218 @jakob0fischl

v0.30.4 - 18th April 2022

  • Increase control over sensitivity to invalid images via failOn, deprecate failOnError (equivalent to failOn: 'warning').

  • Ensure create input image has correct bit depth and colour space. #3139

  • Add support for TypedArray input with byteOffset and length. #3146 @codepage949

  • Improve error message when attempting to render SVG input greater than 32767x32767. #3167

  • Add missing file name to 'Input file is missing' error message. #3178 @Brodan

v0.30.3 - 14th March 2022

  • Allow sharpen options to be provided more consistently as an Object. #2561

  • Expose x1, y2 and y3 parameters of sharpen operation. #2935

  • Prevent double unpremultiply with some composite blend modes (regression in 0.30.2). #3118

v0.30.2 - 2nd March 2022

  • Improve performance and accuracy when compositing multiple images. #2286

  • Expand pkgconfig search path for wider BSD support. #3106

  • Ensure Windows C++ runtime is linked statically (regression in 0.30.0). #3110 @kleisauke

  • Temporarily ignore greyscale ICC profiles to workaround lcms bug. #3112

v0.30.1 - 9th February 2022

  • Allow use of toBuffer and toFile on the same instance. #3044

  • Skip shrink-on-load for known libjpeg rounding errors. #3066 @kleisauke

  • Ensure withoutReduction does not interfere with contain/crop/embed. #3081 @kleisauke

  • Ensure affine interpolator is correctly finalised. #3083 @kleisauke

v0.30.0 - 1st February 2022

  • Add support for GIF output to prebuilt binaries.

  • Reduce minimum Linux ARM64v8 glibc requirement to 2.17.

  • Verify prebuilt binaries with a Subresource Integrity check.

  • Standardise WebP effort option name, deprecate reductionEffort.

  • Standardise HEIF effort option name, deprecate speed.

  • Add support for IIIF v3 tile-based output.

  • Expose control over CPU effort for palette-based PNG output. #2541

  • Improve animated (multi-page) image resize and extract. #2789 @kleisauke

  • Expose platform and architecture of vendored binaries as sharp.vendor. #2928

  • Ensure 16-bit PNG output uses correct bitdepth. #2958 @gforge

  • Properly emit close events for duplex streams. #2976 @driannaude

  • Expose unlimited option for SVG and PNG input, switches off safety features. #2984

  • Add withoutReduction option to resize operation. #3006 @christopherbradleybanks

  • Add resolutionUnit as tiff option and expose in metadata. #3023 @ompal-sisodiya

  • Ensure rotate-then-extract works with EXIF mirroring. #3024

v0.29 - circle

Requires libvips v8.11.3

v0.29.3 - 14th November 2021

  • Ensure correct dimensions when containing image resized to 1px. #2951

  • Impute TIFF xres/yres from density provided to withMetadata. #2952 @mbklein

v0.29.2 - 21st October 2021

  • Add timeout function to limit processing time.

  • Ensure sharp.versions is populated from vendored libvips.

  • Remove animation properties from single page images. #2890

  • Allow use of 'tif' to select TIFF output. #2893 @erf

  • Improve error message on Windows for version conflict. #2918 @dkrnl

  • Throw error rather than exit when invalid binaries detected. #2931

v0.29.1 - 7th September 2021

  • Add lightness option to modulate operation. #2846

  • Ensure correct PNG bitdepth is set based on number of colours. #2855

  • Ensure background is always premultiplied when compositing. #2858

  • Ensure images with P3 profiles retain full gamut. #2862

  • Add support for libvips compiled with OpenJPEG. #2868

  • Remove unsupported animation properties from AVIF output. #2870

  • Resolve paths before comparing input/output filenames. #2878 @rexxars

  • Allow use of speed 9 (fastest) for HEIF encoding. #2879 @rexxars

v0.29.0 - 17th August 2021

  • Drop support for Node.js 10, now requires Node.js >= 12.13.0.

  • Add background property to PNG and GIF image metadata.

  • Add compression property to HEIF image metadata. #2504

  • AVIF encoding now defaults to 4:4:4 chroma subsampling. #2562

  • Allow multiple platform-arch binaries in same node_modules installation tree. #2575

  • Default to single-channel b-w space when extractChannel is used. #2658

  • Allow installation directory to contain spaces (regression in v0.26.0). #2777

  • Add pipelineColourspace operator to set the processing space. #2704 @Daiz

  • Allow bit depth to be set when using raw input and output. #2762 @mart-jansink

  • Allow negate to act only on non-alpha channels. #2808 @rexxars

v0.28 - bijou

Requires libvips v8.10.6

v0.28.3 - 24th May 2021

  • Ensure presence of libvips, vendored or global, before invoking node-gyp.

  • Skip shrink-on-load for multi-page WebP. #2714

  • Add contrast limiting adaptive histogram equalization (CLAHE) operator. #2726 @baparham

v0.28.2 - 10th May 2021

  • Allow withMetadata to set density. #967

  • Skip shrink-on-load where one dimension <4px. #2653

  • Allow escaped proxy credentials. #2664 @msalettes

  • Add premultiplied flag for raw pixel data input. #2685 @mnutt

  • Detect empty input and throw a helpful error. #2687 @JakobJingleheimer

  • Add install-time flag to skip version compatibility checks. #2692 @xemle

v0.28.1 - 5th April 2021

  • Ensure all installation errors are logged with a more obvious prefix.

  • Allow withMetadata to set and update EXIF metadata. #650

  • Add support for OME-TIFF Sub Image File Directories (subIFD). #2557

  • Allow ensureAlpha to set the alpha transparency level. #2634

v0.28.0 - 29th March 2021

  • Prebuilt binaries now include mozjpeg and libimagequant (BSD 2-Clause).

  • Prebuilt binaries limit AVIF support to the most common 8-bit depth.

  • Add mozjpeg option to jpeg method, sets mozjpeg defaults.

  • Reduce the default PNG compressionLevel to the more commonly used 6.

  • Reduce concurrency on glibc-based Linux when using the default memory allocator to help prevent fragmentation.

  • Default missing edge properties of extend operation to zero. #2578

  • Ensure composite does not clip top and left offsets. #2594 @SHG42

  • Improve error handling of network failure at install time. #2608 @abradley

  • Ensure @id attribute can be set for IIIF tile-based output. #2612 @edsilv

  • Ensure composite replicates the correct number of tiles for centred gravities. #2626

v0.27 - avif

Requires libvips v8.10.5

v0.27.2 - 22nd February 2021

  • macOS: Prevent use of globally-installed ARM64 libvips with Rosetta x64 emulation. #2460

  • Linux (musl): Prevent use of prebuilt linuxmusl-x64 binaries with musl >= 1.2.0. #2570

  • Improve 16-bit grey+alpha support by using libvips' has_alpha detection. #2569

  • Allow the use of non lower case extensions with toFormat. #2581 @florian-busch

  • Allow use of recomb operation with single channel input. #2584

v0.27.1 - 27th January 2021

  • Ensure TIFF is cast when using float predictor. #2502 @randyridge

  • Add support for Uint8Array and Uint8ClampedArray input. #2511 @leon

  • Revert: ensure all platforms use fontconfig for font rendering. #2515

  • Expose libvips gaussnoise operation to allow creation of Gaussian noise. #2527 @alza54

v0.27.0 - 22nd December 2020

  • Add support for AVIF to prebuilt binaries.

  • Remove experimental status from heif output, defaults are now AVIF-centric.

  • Allow negative top/left offsets for composite operation. #2391 @CurosMJ

  • Ensure all platforms use fontconfig for font rendering. #2399

v0.26 - zoom

Requires libvips v8.10.0

v0.26.3 - 16th November 2020

v0.26.2 - 14th October 2020

  • Add support for EXR input. Requires libvips compiled with OpenEXR. #698

  • Ensure support for yarn v2. #2379 @jalovatt

  • Add centre/center option to tile-based output. #2397 @beig

v0.26.1 - 20th September 2020

  • Ensure correct pageHeight when verifying multi-page image dimensions. #2343 @derom

  • Allow input density range up to 100000 DPI. #2348 @stefanprobst

  • Ensure animation-related properties can be set for Stream-based input. #2369 @AcrylicShrimp

  • Ensure stats can be calculated for 1x1 input. #2372

  • Ensure animated GIF output is optimised. #2376

v0.26.0 - 25th August 2020

  • Prebuilt libvips binaries are now statically-linked and Brotli-compressed, requiring Node.js 10.16.0+.

  • TIFF output squash is replaced by bitdepth to reduce to 1, 2 or 4 bit.

  • JPEG output quality >= 90 no longer automatically sets chromaSubsampling to 4:4:4.

  • Add most dominant colour to image stats. #640

  • Add support for animated GIF (requires *magick) and WebP output. #2012 @deftomat

  • Add support for libvips ImageMagick v7 loaders. #2258 @vouillon

  • Allow multi-page input via *magick. #2259 @vouillon

  • Add support to withMetadata for custom ICC profile. #2271 @roborourke

  • Ensure prebuilt binaries for ARM default to v7 when using Electron. #2292 @diegodev3

v0.25 - yield

Requires libvips v8.9.1

v0.25.4 - 12th June 2020

  • Allow libvips binary location override where version is appended. #2217 @malice00

  • Enable PNG palette when setting quality, colours, colors or dither. #2226 @romaleev

  • Add level constructor option to use a specific level of a multi-level image. Expose levels metadata for multi-level images. #2222

  • Add support for named alpha channel to extractChannel operation. #2138

  • Add experimental sharpness calculation to stats() response. #2251

  • Emit warning event for non-critical processing problems. #2032

v0.25.3 - 17th May 2020

  • Ensure libvips is initialised only once, improves worker thread safety. #2143

  • Ensure npm platform flag is respected when copying DLLs. #2188 @dimadeveatii

  • Allow SVG input with large inline images to be parsed. #2195

v0.25.2 - 20th March 2020

  • Provide prebuilt binaries for Linux ARM64v8.

  • Add IIIF layout support to tile-based output. #2098 @edsilv

  • Ensure input options are consistently and correctly detected. #2118

  • Ensure N-API prebuilt binaries work on RHEL7 and its derivatives. #2119

  • Ensure AsyncWorker options are persisted. #2130

v0.25.1 - 7th March 2020

  • Ensure prebuilt binaries are fetched based on N-API version. #2117

v0.25.0 - 7th March 2020

  • Remove limitInputPixels and sequentialRead previously deprecated in v0.24.0.

  • Migrate internals to N-API. #1282

  • Add support for 32-bit Windows. #2088

  • Ensure correct ordering of rotate-then-trim operations. #2087

  • Ensure composite accepts limitInputPixels and sequentialRead input options. #2099

v0.24 - "wit"

Requires libvips v8.9.0.

v0.24.1 - 15th February 2020

  • Prevent use of sequentialRead for EXIF-based rotate operation. #2042

  • Ensure RGBA LZW TIFF returns correct channel count. #2064

v0.24.0 - 16th January 2020

  • Drop support for Node.js 8. #1910

  • Drop support for undefined input where options also provided. #1768

  • Move limitInputPixels and sequentialRead to input options, deprecating functions of the same name.

  • Expose delay and loop metadata for animated images. #1905

  • Ensure correct colour output for 16-bit, 2-channel PNG input with ICC profile. #2013

  • Prevent use of sequentialRead for rotate operations. #2016

  • Correctly bind max width and height values when using withoutEnlargement. #2024 @BrychanOdlum

  • Add support for input with 16-bit RGB profile. #2037

v0.23 - "vision"

Requires libvips v8.8.1.

v0.23.4 - 5th December 2019

  • Handle zero-length Buffer objects when using Node.js v13.2.0+.

  • Expose raw TIFFTAG_PHOTOSHOP metadata. #1600

  • Improve thread safety by using copy-on-write when updating metadata. #1986

v0.23.3 - 17th November 2019

  • Ensure trim operation supports images contained in the alpha channel. #1597

  • Ensure tile overlap option works as expected. #1921 @rustyguts

  • Allow compilation on FreeBSD and variants (broken since v0.23.0) #1952 @pouya-eghbali

  • Ensure modulate and other colour-based operations can co-exist. #1958

v0.23.2 - 28th October 2019

v0.23.1 - 26th September 2019

  • Ensure sharp.format.vips is present and correct (filesystem only). #1813

  • Ensure invalid width and height provided as options to resize throw. #1817

  • Allow use of 'heic' and 'heif' identifiers with toFormat. #1834 @jaubourg

  • Add premultiplied option to composite operation. #1835 @Andargor

  • Allow instance reuse with differing toBuffer options. #1860 @RaboliotTheGrey

  • Ensure image is at least 3x3 pixels before attempting trim operation.

v0.23.0 - 29th July 2019

  • Remove overlayWith previously deprecated in v0.22.0.

  • Add experimental support for HEIF images. Requires libvips compiled with libheif. #1105

  • Expose libwebp smartSubsample and reductionEffort options. #1545

  • Add experimental support for Worker Threads. #1558

  • Use libvips' built-in CMYK and sRGB profiles when required. #1619

  • Drop support for Node.js versions 6 and 11. #1674

  • Expose skipBlanks option for tile-based output. #1687 @RaboliotTheGrey

  • Allow use of failOnError option with Stream-based input. #1691

  • Fix rotate/extract ordering for non-90 angles. #1755 @iovdin

v0.22 - "uptake"

Requires libvips v8.7.4.

v0.22.1 - 25th April 2019

v0.22.0 - 18th March 2019

  • Remove functions previously deprecated in v0.21.0: background, crop, embed, ignoreAspectRatio, max, min and withoutEnlargement.

  • Add composite operation supporting multiple images and blend modes; deprecate overlayWith. #728

  • Add support for pages input option for multi-page input. #1566

  • Allow Stream-based input of raw pixel data. #1579

  • Add support for page input option to GIF and PDF. #1595 @ramiel

v0.21 - "teeth"

Requires libvips v8.7.0.

v0.21.3 - 19th January 2019

  • Input image decoding now fails fast, set failOnError to change this behaviour.

  • Failed filesystem-based input now separates missing file and invalid format errors. #1542

v0.21.2 - 13th January 2019

  • Ensure all metadata is removed from PNG output unless withMetadata used.

  • Ensure shortest edge is at least one pixel after resizing. #1003

  • Add ensureAlpha operation to add an alpha channel, if missing. #1153

  • Expose pages and pageHeight metadata for multi-page input images. #1205

  • Expose PNG output options requiring libimagequant. #1484

  • Expose underlying error message for invalid input. #1505

  • Prevent mutatation of options passed to jpeg. #1516

  • Ensure forced output format applied correctly when output chaining. #1528

v0.21.1 - 7th December 2018

  • Install: support sharp_dist_base_url npm config, like existing SHARP_DIST_BASE_URL. #1422 @SethWen

  • Ensure channel metadata is correct for raw, greyscale output. #1425

  • Add support for the "mitchell" kernel for image reductions. #1438 @Daiz

  • Allow separate parameters for gamma encoding and decoding. #1439 @Daiz

  • Build prototype with Object.assign to allow minification. #1475 @jaubourg

  • Expose libvips' recombination matrix operation. #1477 @fromkeith

  • Expose libvips' pyramid/tile options for TIFF output. #1483 @mbklein

v0.21.0 - 4th October 2018

  • Deprecate the following resize-related functions: crop, embed, ignoreAspectRatio, max, min and withoutEnlargement. Access to these is now via options passed to the resize function. For example: embed('north') is now resize(width, height, { fit: 'contain', position: 'north' }), crop('attention') is now resize(width, height, { fit: 'cover', position: 'attention' }), max().withoutEnlargement() is now resize(width, height, { fit: 'inside', withoutEnlargement: true }). #1135

  • Deprecate the background function. Per-operation background options added to resize, extend and flatten operations. #1392

  • Add size to metadata response (Stream and Buffer input only). #695

  • Switch from custom trim operation to vips_find_trim. #914

  • Add chromaSubsampling and isProgressive properties to metadata response. #1186

  • Drop Node 4 support. #1212

  • Enable SIMD convolution by default. #1213

  • Add experimental prebuilt binaries for musl-based Linux. #1379

  • Add support for arbitrary rotation angle via vips_rotate. #1385 @freezy

v0.20 - "prebuild"

Requires libvips v8.6.1.

v0.20.8 - 5th September 2018

  • Avoid race conditions when creating directories during installation. #1358 @ajhool

  • Accept floating point values for input density parameter. #1362 @aeirola

v0.20.7 - 21st August 2018

  • Use copy+unlink if rename operation fails during installation. #1345

v0.20.6 - 20th August 2018

  • Add removeAlpha operation to remove alpha channel, if any. #1248

  • Expose mozjpeg quant_table flag. #1285 @rexxars

  • Allow full WebP alphaQuality range of 0-100. #1290 @sylvaindumont

  • Cache libvips binaries to reduce re-install time. #1301

  • Ensure vendor platform mismatch throws error at install time. #1303

  • Improve install time error messages for FreeBSD users. #1310

  • Ensure extractChannel works with 16-bit images. #1330

  • Expose depth option for tile-based output. #1342 @alundavies

  • Add experimental entropy field to stats response.

v0.20.5 - 27th June 2018

v0.20.4 - 20th June 2018

  • Prevent possible rounding error when using shrink-on-load and 90/270 degree rotation. #1241 @anahit42

  • Ensure extractChannel sets correct single-channel colour space interpretation. #1257 @jeremychone

v0.20.3 - 29th May 2018

  • Fix tint operation by ensuring LAB interpretation and allowing negative values. #1235 @wezside

v0.20.2 - 28th April 2018

  • Add tint operation to set image chroma. #825 @rikh42

  • Add environment variable to ignore globally-installed libvips. #1165 @oncletom

  • Add support for page selection with multi-page input (GIF/TIFF). #1204 @woolite64

  • Add support for Group4 (CCITTFAX4) compression with TIFF output. #1208 @woolite64

v0.20.1 - 17th March 2018

  • Improve installation experience when a globally-installed libvips below the minimum required version is found. #1148

  • Prevent smartcrop error when cumulative rounding is below target size. #1154 @ralrom

  • Expose libvips' median filter operation. #1161 @BiancoA

v0.20.0 - 5th March 2018

  • Add support for prebuilt sharp binaries on common platforms. #186

v0.19 - "suit"

Requires libvips v8.6.1.

v0.19.1 - 24th February 2018

  • Expose libvips' linear transform feature. #1024 @3epnm

  • Expose angle option for tile-based output. #1121 @BiancoA

  • Prevent crop operation when image already at or below target dimensions. #1134 @pieh

v0.19.0 - 11th January 2018

  • Expose offset coordinates of strategy-based crop. #868 @mirohristov-com

  • PNG output now defaults to adaptiveFiltering=false, compressionLevel=9 #872 @wmertens

  • Add stats feature for pixel-derived image statistics. #915 @rnanwani

  • Add failOnError option to fail-fast on bad input image data. #976 @mceachen

  • Resize: switch to libvips' implementation, make fastShrinkOnLoad optional, remove interpolator and centreSampling options. #977 @jardakotesovec

  • Attach finish event listener to a clone only for Stream-based input. #995 @whmountains

  • Add tilecache before smartcrop to avoid over-computation of previous operations. #1028 @coffeebite

  • Prevent toFile extension taking precedence over requested format. #1037 @tomgallagher

  • Add support for gravity option to existing embed feature. #1038 @AzureByte

  • Expose IPTC and XMP metadata when available. #1079 @oaleynik

  • TIFF output: switch default predictor from 'none' to 'horizontal' to match libvips' behaviour.

v0.18 - "ridge"

Requires libvips v8.5.5.

v0.18.4 - 18th September 2017

  • Ensure input Buffer really is marked as Persistent, prevents mark-sweep GC. #950 @lfdoherty

v0.18.3 - 13th September 2017

v0.18.2 - 1st July 2017

  • Expose libvips' xres and yres properties for TIFF output. #828 @YvesBos

  • Ensure flip and flop operations work with auto-rotate. #837 @rexxars

  • Allow binary download URL override via SHARP_DIST_BASE_URL env variable. #841

  • Add support for Solus Linux. #857 @ekremkaraca

v0.18.1 - 30th May 2017

  • Remove regression from #781 that could cause incorrect shrink calculation. #831 @suprMax

v0.18.0 - 30th May 2017

  • Remove the previously-deprecated output format "option" functions: quality, progressive, compressionLevel, withoutAdaptiveFiltering, withoutChromaSubsampling, trellisQuantisation, trellisQuantization, overshootDeringing, optimiseScans and optimizeScans.

  • Ensure maximum output dimensions are based on the format to be used. #176 @stephanebachelier

  • Avoid costly (un)premultiply when using overlayWith without alpha channel. #573 @strarsis

  • Include pixel depth (e.g. "uchar") when reading metadata. #577 @moedusa

  • Add support for Buffer and Stream-based TIFF output. #587 @strarsis

  • Expose warnings from libvips via NODE_DEBUG=sharp environment variable. #607 @puzrin

  • Switch to the libvips implementation of "attention" and "entropy" crop strategies. #727

  • Improve performance and accuracy of nearest neighbour integral upsampling. #752 @MrIbby

  • Constructor single argument API: allow plain object, reject null/undefined. #768 @kub1x

  • Ensure ARM64 pre-built binaries use correct C++11 ABI version. #772 @ajiratech2

  • Prevent aliasing by using dynamic values for shrink(-on-load). #781 @kleisauke

  • Expose libvips' "squash" parameter to enable 1-bit TIFF output. #783 @YvesBos

  • Add support for rotation using any multiple of +/-90 degrees. #791 @ncoden

  • Add "jpg" alias to toFormat as shortened form of "jpeg". #814 @jingsam

v0.17 - "quill"

Requires libvips v8.4.2.

v0.17.3 - 1st April 2017

  • Allow toBuffer to optionally resolve a Promise with both info and data. #143 @salzhrani

  • Create blank image of given width, height, channels and background. #470 @pjarts

  • Add support for the "nearest" kernel for image reductions. #732 @alice0meta

  • Add support for TIFF compression and predictor options. #738 @kristojorg

v0.17.2 - 11th February 2017

  • Ensure Readable side of Stream can start flowing after Writable side has finished. #671 @danhaller

  • Expose WebP alpha quality, lossless and near-lossless output options. #685 @rnanwani

v0.17.1 - 15th January 2017

  • Improve error messages for invalid parameters. @spikeon #644

  • Simplify expression for finding vips-cpp libdir. #656

  • Allow HTTPS-over-HTTP proxy when downloading pre-compiled dependencies. @wangzhiwei1888 #679

v0.17.0 - 11th December 2016

  • Drop support for versions of Node prior to v4.

  • Deprecate the following output format "option" functions: quality, progressive, compressionLevel, withoutAdaptiveFiltering, withoutChromaSubsampling, trellisQuantisation, trellisQuantization, overshootDeringing, optimiseScans and optimizeScans. Access to these is now via output format functions, for example quality(n) is now jpeg({quality: n}) and/or webp({quality: n}).

  • Autoconvert GIF and SVG input to PNG output if no other format is specified.

  • Expose libvips' "centre" resize option to mimic *magick's +0.5px convention. #568

  • Ensure support for embedded base64 PNG and JPEG images within an SVG. #601 @dynamite-ready

  • Ensure premultiply operation occurs before box filter shrink. #605 @CmdrShepardsPie @teroparvinen

  • Add support for PNG and WebP tile-based output formats (in addition to JPEG). #622 @ppaskaris

  • Allow use of extend with greyscale input. #623 @ppaskaris

  • Allow non-RGB input to embed/extend onto background with an alpha channel. #646 @DaGaMs

v0.16 - "pencil"

Requires libvips v8.3.3

v0.16.2 - 22nd October 2016

  • Restrict readelf usage to Linux only when detecting global libvips version. #602 @caoko

v0.16.1 - 13th October 2016

  • C++11 ABI version is now auto-detected, remove sharp-cxx11 installation flag.

  • Add experimental 'attention' crop strategy. #295

  • Include .node extension for Meteor's require() implementation. #537 @isjackwild

  • Ensure convolution kernel scale is clamped to a minimum value of 1. #561 @abagshaw

  • Correct calculation of y-axis placement when overlaying image at a fixed point. #566 @Nateowami

v0.16.0 - 18th August 2016

  • Add pre-compiled libvips for OS X, ARMv7 and ARMv8. #312

  • Ensure boolean, bandbool, extractChannel ops occur before sRGB conversion. #504 @mhirsch

  • Recalculate factors after WebP shrink-on-load to avoid round-to-zero errors. #508 @asilvas

  • Prevent boolean errors during extract operation. #511 @mhirsch

  • Add joinChannel and toColourspace/toColorspace operations. #513 @mhirsch

  • Add support for raw pixel data with boolean and withOverlay operations. #516 @mhirsch

  • Prevent bandbool creating a single channel sRGB image. #519 @mhirsch

  • Ensure ICC profiles are removed from PNG output unless withMetadata used. #521 @ChrisPinewood

  • Add alpha channels, if missing, to overlayWith images. #540 @cmtt

  • Remove deprecated interpolateWith method - use resize(w, h, { interpolator: ... }) #310

v0.15 - "outfit"

Requires libvips v8.3.1

v0.15.1 - 12th July 2016

  • Concat Stream-based input in single operation for ~+3% perf and less GC. #429 @papandreou

  • Add alpha channel, if required, before extend operation. #439 @frulo

  • Allow overlay image to be repeated across entire image via tile option. #443 @lemnisk8

  • Add cutout option to overlayWith feature, applies only the alpha channel of the overlay image. #448 @kleisauke

  • Ensure scaling factors are calculated independently to prevent rounding errors. #452 @puzrin

  • Add --sharp-cxx11 flag to compile with gcc's new C++11 ABI. #456 @kapouer

  • Add top/left offset support to overlayWith operation. #473 @rnanwani

  • Add convolve operation for kernel-based convolution. #479 @mhirsch

  • Add greyscale option to threshold operation for colourspace conversion control. #480 @mhirsch

  • Ensure ICC profiles are licenced for distribution. #486 @kapouer

  • Allow images with an alpha channel to work with LAB-colourspace based sharpen. #490 @jwagner

  • Add trim operation to remove "boring" edges. #492 @kleisauke

  • Add bandbool feature for channel-wise boolean operations. #496 @mhirsch

  • Add extractChannel operation to extract a channel from an image. #497 @mhirsch

  • Add ability to read and write native libvips .v files. #500 @mhirsch

  • Add boolean feature for bitwise image operations. #501 @mhirsch

v0.15.0 - 21st May 2016

  • Use libvips' new Lanczos 3 kernel as default for image reduction. Deprecate interpolateWith method, now provided as a resize option. #310 @jcupitt

  • Take advantage of libvips v8.3 features. Add support for libvips' new GIF and SVG loaders. Pre-built binaries now include giflib and librsvg, exclude *magick. Use shrink-on-load for WebP input. Break existing sharpen API to accept sigma and improve precision. #369

  • Remove unnecessary (un)premultiply operations when not resizing/compositing. #413 @jardakotesovec

v0.14 - "needle"

Requires libvips v8.2.3

v0.14.1 - 16th April 2016

v0.14.0 - 2nd April 2016

  • Add ability to extend (pad) the edges of an image. #128 @blowsie

  • Add support for Zoomify and Google tile layouts. Breaks existing tile API. #223 @bdunnette

  • Improvements to overlayWith: differing sizes/formats, gravity, buffer input. #239 @chrisriley

  • Add entropy-based crop strategy to remove least interesting edges. #295 @rightaway

  • Expose density metadata; set density of images from vector input. #338 @lookfirst

  • Emit post-processing 'info' event for Stream output. #367 @salzhrani

  • Ensure output image EXIF Orientation values are within 1-8 range. #385 @jtobinisaniceguy

  • Ensure ratios are not swapped when rotating 90/270 and ignoring aspect. #387 @kleisauke

  • Remove deprecated style of calling extract API. Breaks calls using positional arguments. #276

v0.13 - "mind"

Requires libvips v8.2.2

v0.13.1 - 27th February 2016

  • Fix embedding onto transparent backgrounds; regression introduced in v0.13.0. #366 @diegocsandrim

v0.13.0 - 15th February 2016

  • Improve vector image support by allowing control of density/DPI. Switch pre-built libs from Imagemagick to Graphicsmagick. #110 @bradisbell

  • Add support for raw, uncompressed pixel Buffer/Stream input. #220 @mikemorris

  • Switch from libvips' C to C++ bindings, requires upgrade to v8.2.2. #299

  • Control number of open files in libvips' cache; breaks existing cache behaviour. #315 @impomezia

  • Ensure 16-bit input images can be normalised and embedded onto transparent backgrounds. #339 #340 @janaz

  • Ensure selected format takes precedence over any unknown output filename extension. #344 @ubaltaci

  • Add support for libvips' PBM, PGM, PPM and FITS image format loaders. #347 @oaleynik

  • Ensure default crop gravity is center/centre. #351 @joelmukuthu

  • Improve support for musl libc systems e.g. Alpine Linux. #354 #359 @download13 @wjordan

  • Small optimisation when reducing by an integral factor to favour shrink over affine.

  • Add support for gamma correction of images with an alpha channel.

v0.12 - "look"

Requires libvips v8.2.0

v0.12.2 - 16th January 2016

  • Upgrade libvips to v8.2.0 for improved vips_shrink.

  • Add pre-compiled libvips for ARMv6+ CPUs.

  • Ensure 16-bit input images work with embed option. #325 @janaz

  • Allow compilation with gmake to provide FreeBSD support. #326 @c0decafe

  • Attempt to remove temporary file after installation. #331 @dtoubelis

v0.12.1 - 12th December 2015

  • Allow use of SIMD vector instructions (via liborc) to be toggled on/off. #172 @bkw @puzrin

  • Ensure embedded ICC profiles output with perceptual intent. #321 @vlapo

  • Use the NPM-configured HTTPS proxy, if any, for binary downloads.

v0.12.0 - 23rd November 2015

  • Bundle pre-compiled libvips and its dependencies for 64-bit Linux and Windows. #42

  • Take advantage of libvips v8.1.0+ features. #152

  • Add support for 64-bit Windows. Drop support for 32-bit Windows. #224 @sabrehagen

  • Switch default interpolator to bicubic. #289 @mahnunchik

  • Pre-extract rotatation should not swap width/height. #296 @asilvas

  • Ensure 16-bit+alpha input images are (un)premultiplied correctly. #301 @izaakschroeder

  • Add threshold operation. #303 @dacarley

  • Add negate operation. #306 @dacarley

  • Support options Object with existing extract operation. #309 @papandreou

v0.11 - "knife"

v0.11.4 - 5th November 2015

  • Add corners, e.g. northeast, to existing gravity option. #291 @brandonaaron

  • Ensure correct auto-rotation for EXIF Orientation values 2 and 4. #288 @brandonaaron

  • Make static linking possible via --runtime_link install option. #287 @vlapo

v0.11.3 - 8th September 2015

  • Intrepret blurSigma, sharpenFlat, and sharpenJagged as double precision. #263 @chrisriley

v0.11.2 - 28th August 2015

  • Allow crop gravity to be provided as a String. #255 @papandreou
  • Add support for io.js v3 and Node v4. #246

v0.11.1 - 12th August 2015

  • Silence MSVC warning: "C4530: C++ exception handler used, but unwind semantics are not enabled". #244 @TheThing

  • Suppress gamma correction for input image with alpha transparency. #249 @compeak

v0.11.0 - 15th July 2015

  • Allow alpha transparency compositing via new overlayWith method. #97 @gasi

  • Expose raw ICC profile data as a Buffer when using metadata. #129 @homerjam

  • Allow image header updates via a parameter passed to existing withMetadata method. Provide initial support for EXIF Orientation tag, which if present is now removed when using rotate, flip or flop. #189 @h2non

  • Tighten constructor parameter checks. #221 @mikemorris

  • Allow one input Stream to be shared with two or more output Streams via new clone method. #235 @jaubourg

  • Use round instead of floor when auto-scaling dimensions to avoid floating-point rounding errors. #238 @richardadjogah

v0.10 - "judgment"

v0.10.1 - 1st June 2015

  • Allow embed of image with alpha transparency onto non-transparent background. #204 @mikemliu

  • Include C standard library for atoi as Xcode 6.3 appears to no longer do this. #228 @doggan

v0.10.0 - 23rd April 2015