All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning as implemented by Cargo.
VipsImage::thumbnail_file — vips_thumbnail constructor that combines load + resize (shrink-on-load). Preferred for file sources over from_file + thumbnail.VipsImage::thumbnail_buffer — vips_thumbnail_buffer constructor for encoded image bytes. Preferred over from_buffer + thumbnail.crop/extract_area, embed, gravity, insert, flip/fliphor/flipver, rot/rot90/rot180/rot270, rotate, autorot, zoom, extract_band, bandjoin2, bandjoin_const, copy, copy_memory.add/subtract/multiply/divide, linear/linear1, invert, cast, colourspace, gaussblur, sharpen.avg, min_value, max_value, getpoint.write_to_buffer(suffix); free functions find_load / find_save.sin/cos/tan, ln/log10/exp/exp10, floor/ceil/rint, abs/sign/clamp, pow_const.less/lesseq/more/moreeq/equal_const/notequal_const.and_const/or_const/eor_const, lshift_const/rshift_const, bandbool/bandand/bandor/bando, bandmean, bandsplit.conv, erode/dilate, median/rank, sobel, canny.ifthenelse, smartcrop, falsecolour, premultiply/unpremultiply, sequential.deviate, percent, find_trim.black, xyz.wrap, replicate, grid, copy_file.gamma, hist_find/hist_local/hist_equal/hist_entropy, maplut, bandfold/bandunfold, labelregions.grey, sines, zone, perlin, gaussnoise.examples/ops_smoke smoke coverage for the new APIs.package.documentation and README docs links at https://docs.rs/vips/ (drop GitHub Pages URLs).VipsImage::thumbnail (vips_thumbnail_image) is only for already-decoded pixels; file/buffer sources should use thumbnail_file / thumbnail_buffer (issue #9).VipsBuffer::thumbnail now takes an explicit VipsSize instead of hardcoding VIPS_SIZE_FORCE, is implemented on [u8] (so &[u8]/Vec<u8> work with correct lifetimes), and delegates to VipsImage::thumbnail_buffer.First stable crates.io release. Resolves vips-sys 0.2.0 from crates.io.
Edition 2024 (Rust ≥ 1.85).
Release workflow: version/CHANGELOG gates, quality checks, crates.io publish, GitHub Release notes.Release workflow also supports manual workflow_dispatch with a tag input.VipsImage::resize_reduce — box pre-shrink (vips_shrink) + resize for large sources.VipsImage::shrink_box — integer box shrink pre-pass.VipsImage::write_to_memory and VipsImage::write_jpeg as public APIs.VipsImage::bands accessor.examples/perf_smoke for reduce/path/memory smoke checks.VipsImage/VipsRegion/VipsInterpolate store NonNull privately; expose only as_ptr() for FFI bridges.ffi module centralizes null-checks, unref, and status-code mapping.image_postclose; stop re-exporting vips_call under a safe-looking alias.VipsRegion::new returns Option (allocation can fail).lib.rs.from_file / write_to_file accept impl AsRef<Path> and convert once to CString.version_string() returns a cached &'static str instead of allocating on every call.hwindow=5, harea=2, bandno=-1).width/height/size/bands/concurrency) marked #[inline].VipsImage<'a> so intermediate images can drop safely.resolver = "3"; vips-sys dependency is crates.io-only (optional sibling path documented for local work).rust-version field; edition remains 2024.c"..." literals.VipsBuffer::thumbnail no longer pre-allocates a VipsImage that was immediately overwritten (memory leak).VipsImage::thumbnail now checks the libvips return code, not only a null pointer.VipsImage::from_memory returns early without installing the postclose free hook when creation fails.VipsImage::Drop / image_postclose null-pointer guards.init under a process lock so concurrent vips_init cannot SIGSEGV.RustFmt job no longer inherits the nested working-directory (root checkout).trybuild with rustc-1.98-formatted .stderr snapshots (avoids compiletest E0463 and version-skew mismatches).