- Derive SDF sprite buffer size from the SDF radius and cutoff, so the transparent padding around each icon is always large enough to preserve the full useful SDF range (see #119)
- Text in SVG
<text>elements now rendered in PNG sprites (see #102) - Support loading SVG files compressed with gzip (
*.svgz; see #107) - PNG encoding now always uses the "None" filter, instead of trialling multiple filters, to speed up encoding (see #110)
- Propagate errors in
get_svg_input_paths(see #108) - Use consuming builder pattern for
SpritesheetBuilder(see #109) - Update Oxipng dependency from v9 to v10 (see #106)
- Update thiserror dependency from v1 to v2 (see #106)
The minimum supported version of Rust is now 1.85.1 (released March 2025).
- Add
--spacingargument to apply padding between sprites (see #76 and #95) - Scale SDF buffer and radius by pixel ratio (see #96 and #86)
- Add details to the release process docs
- Add Docker Buildx support to release workflow (see #90)
- Add Dockerfile and publish image to GitHub Container Registry (see #89)
- Fix issue creating valid sprite names for symlinks (see #81). This has two side effects:
- sprite names can now be generated for files that don't exist
spreet::sprite_name()now returns aPathErrorinstead of anIoErrorwhen theabs_pathargument is not an ancestor of thepathargument.
- Update clap dependency to v4.5
- Update multimap dependency to v0.10
- Update oxipng dependency to v9.1
- Update resvg dependency to v0.43
- Update assert_fs dev dependency to v1.1
- Update softprops/action-gh-release to v2
The minimum supported version of Rust is now 1.79.0 (released June 2024).
- Add support for SDF icons (aka re-colourable images). See #58
- Breaking change: due to the addition of SDF icons, both the
SpriteDescriptionandSpritesheetBuilderstructs have a new boolean field namedsdf, whileSpriteDescription::new()also takes a newsdfargument. Set these tofalseif you want to match the existing behaviour (i.e. no SDF icons). To create a spritesheet of SDF icons, callSpritesheetBuilder::make_sdf(). - Add a new constructor,
Sprite::new_sdf(). This rasterises an SVG to a bitmap as usual, but generates a signed distance field for the image and stores that data in the bitmap's alpha channel
- Breaking change: move all public identifiers to the root of the crate, e.g.
spreet::error::SpreetError->spreet::SpreetError, with the exception ofresvg. - Update oxipng dependency to v9.0.0. This improves compression of PNG spritesheets without visual changes, but the PNGs won't be byte-to-byte compatible with spritesheets output by earlier versions of Spreet
- Update resvg dependency to v0.36.0
- Remove the deprecated function
spreet::sprite::generate_pixmap_from_svg() - The
spreet::sprite_namefunction (previously available asspreet::sprite::sprite_name) now returnsResult<String, Error>instead ofString, and will no longer panic - The
spreet::get_svg_input_pathsfunction (previously available asspreet::fs::get_svg_input_paths) now returnsResult<Vec<PathBuf>, Error>instead ofVec<PathBuf>, and will no longer panic
- Support stretchable icons (see #53)
- Make the CLI an optional (but default) feature (#62). This speeds up the build when using Spreet as a Rust library (see README)
- Fix bug that meant URLs in SVG
<image>elements were resolved relative to the current working directory, not to the SVG itself (see #60) - Update resvg dependency to v0.35
- Update clap dependency to v4.4
- Remove Rayon dependency. This means the Spreet CLI no longer parses SVGs in parallel, but that was a fun-but-unnecessary optimisation in the first place that generally saved only a handful of milliseconds
- Deprecated:
spreet::sprite::generate_pixmap_from_svg()has been deprecated and will be removed in a future version. Usespreet::sprite::Spreet::pixmap()instead
The minimum supported version of Rust is now 1.70.0 (released June 2023).
- Improvements to using Spreet as a Rust library (#57 and #59)
- Optimise Oxipng usage to reduce dev dependencies (#61)
- Optimise the
mainfunction (#56) - Update crunch dependency to v0.5.3
- Update resvg dependency to v0.34
- Update clap dependency to v4.3
- Update multimap dependency to v0.9.0
- Update Rayon dependency to v1.7
- Update assert_fs dependency to v1.0.13
Note: the update to resvg brings a new image rendering algorithm. This produces smaller images and improves performance, but the PNGs won't be byte-to-byte compatible with spritesheets output by earlier versions of Spreet. There should be no visual change though.
- Replace unmaintained actions-rs/toolchain with dtolnay/rust-toolchain (#44 and #45)
- Publish to crates.io when new version is released (#46)
- Update clap dependency to v4.1
- Add
--recursiveargument, to include images in sub-directories (see #43) - Breaking change: update Oxipng dependency to v8. Spritesheet PNGs output by Spreet are now compressed using libdeflate. This produces smaller files but the PNGs won't be byte-to-byte compatible with spritesheets output by earlier versions of Spreet. This also causes Spreet's minimum Rust version to be 1.61.0
- Rasterize SVGs in parallel
- Add tutorial and benchmarks to README
- Update clap dependency to v4
- Update oxipng dependency to v6
- Use tiny-skia and usvg as re-exported from resvg
- Move predicates to dev-dependencies
- Add CLI tests
- Add
--uniqueargument (see #14) - Optimise spritesheet PNG using
oxipng - Match the way
spritezero-clitraverses the input directory - Provide a Homebrew formula tap for easy MacOS/Linux installation
- Resize the target bin as required, instead of hardcoding a square 1.4 times the size of the sprites
- Trim unused transparent pixels from the spritesheet (excluding transparent pixels within sprites)
- Ensure target bin is at least as wide/tall as the widest/tallest sprite
- Pretty-print the JSON in the sprite index file
- Strip symbols from binaries using Cargo
- Add GitHub Actions workflow to draft a new release when a new tag is created
- Use one parallel code generation unit for release
- Bump clap Rust dependency from version 3.1.5 to version 3.1.6
- Bump actions/checkout GitHub Actions dependency from version 2 to version 3
- Initial beta release