Skip to content

Tags: SAY-5/image

Tags

v0.25.10

Toggle v0.25.10's commit message
Release 0.25.10

Features:
- Added `GenericImage::copy_from_samples` that can be implemented for images
  that can be efficiently filled from a matrix-layout of samples. Its default
  implementation will *not* defer to `copy_from`, consider implementing this if
  you specialized the latter.
- Added `GenericImageView::to_pixel_view` that can be implemented to describe
  the buffer in terms our `FlatSamples` matrix layout, if applicable. This
  allows algorithms over generic images to run a specialized version where they
  can be more efficient over an raw input slice.
- Added `ImageBuffer::from_raw_bgr{,a}` to efficiently byte-swap images into
  the RGBA layout of the buffer (image-rs#2596).
- Added `ExtendedColorType::Rgb5x1` to represent 5-bit colors as from TGA (image-rs#2609).
- Added `metadata::LoopCount` and `AnimationDecoder::loop_count` to query if
  animations should repeat in a uniform manner (gif, webp, avif) (image-rs#2719, image-rs#2786).
- `load_from_memory` now utilizes format detection hooks if any are applicable.

Structural changes:
- Various changes that reduce the compile time of `image` on codegen by
  reducing the number of monomorphizations (image-rs#2804, image-rs#2800, image-rs#2807).
- `GenericImage::copy_from`'s default implementation tries `copy_from_samples`
  first if the source can be successfully cast with `to_pixel_view`.
- `<ImageBuffer as GenericImage>::copy_from` is now must faster for
  `ImageBuffer` when the source implements `GenericImageView::to_pixel_view`.
- `<SubImage<_> as GenericImage>::copy_from` inherits the previously mentioned
  optimizations for pixel sources when the inner type provides them. It also
  provides `to_pixel_view` based on the inner type.
- `ImageBuffer::as_flat_samples` no longer requires `AsRef<[P::Subpixel]>` for
  the underlying container, just `Deref` (image-rs#2777).

Bug fixes:
- Fixed a panic in TGA where indices have more bits than mapped colors (image-rs#2673).

Notable decoder changes:
- Bump `tiff` to `0.11`, supporting planar layout images (image-rs#2743).
- ICC profiles can now be written for TIFF files (image-rs#2746)
- Update `ravif` to `0.13`, supporting EXIF (image-rs#2733).
- Update `jpeg-encoder` to `0.7` bringing SIMD acceleration (image-rs#2736).
- The `pnm` decoder decodes binary data quicker with fewer allocations (image-rs#2797).
- The `tga` decoder handles 5-bit data and colormaps correctly (image-rs#2608, image-rs#2609).

Compatibility notes (new section):
- Bump rust-version to `1.88`.
- Registered hooks now normalize the file extension they are registered against
  to ascii-lowercase. It is no longer necessary to register all such variants.
  This may conflate two hooks that previously hooked the same format with
  different casing.

v0.25.9

Toggle v0.25.9's commit message
Release 0.25.9

Features:
 - Support extracting XMP metadata from PNG, JPEG, GIF, WebP and TIFF files (image-rs#2567, image-rs#2634, image-rs#2644)
 - Support reading IPTC metadata from PNG and JPG files (image-rs#2611)
 - Support reading ICC profile from GIF files (image-rs#2644)
 - Allow setting a specific DEFLATE compression level when writing PNG (image-rs#2583)
 - Initial support for 16-bit CMYK TIFF files (image-rs#2588)
 - Allow extracting the alpha channel of a `Pixel` in a generic way (image-rs#2638)

Structural changes:
 - EXR format decoding now only uses multi-threading via Rayon when the `rayon` feature is enabled (image-rs#2643)
 - Upgraded zune-jpeg to 0.5.x, ravif to 0.12.x, gif to 0.14.x
 - pnm: parse integers in PBM/PGM/PPM headers without allocations (image-rs#2620)
 - Replace `doc_auto_cfg` with `doc_cfg` (image-rs#2637)

Bug fixes:
 - Do not encode empty JPEG images (image-rs#2624)
 - tga: reject empty images (image-rs#2614)
 - tga: fix orientation flip for color mapped images (image-rs#2607)
 - tga: adjust colormap lookup to match tga 2.0 spec (image-rs#2608)

v0.25.8

Toggle v0.25.8's commit message
Release 0.25.8

Re-release of `0.25.7`

Fixes:
- Reverted a signature change to `load_from_memory` that lead to large scale
  type inference breakage despite being technically compatible.
- Color conversion Luma to Rgb used incorrect coefficients instead of broadcasting.

From version 0.25.7 (yanked)

Features:
  - Added an API for external image format implementations to register themselves as decoders for a specific format in `image` (image-rs#2372)
  - Added [CICP](https://www.color.org/iccmax/download/CICP_tag_and_type_amendment.pdf) awarenes via [moxcms](https://crates.io/crates/moxcms) to support color spaces (image-rs#2531). The support for transforming is limited for now and will be gradually expanded.
  - You can now embed Exif metadata when writing JPEG, PNG and WebP images (image-rs#2537, image-rs#2539)
  - Added functions to extract orientation from Exif metadata and optionally clear it in the Exif chunk (image-rs#2484)
  - Serde support for more types (image-rs#2445)
  - PNM encoder now supports writing 16-bit images (image-rs#2431)

API improvements:
  - `save`, `save_with_format`, `write_to` and `write_with_encoder` methods on `DynamicImage` now automatically convert the pixel format when necessary instead of returning an error (image-rs#2501)
  - Added `DynamicImage::has_alpha()` convenience method
  - Implemented `TryFrom<ExtendedColorType>` for `ColorType` (image-rs#2444)
  - Added `const HAS_ALPHA` to trait `Pixel`
  - Unified the error for unsupported encoder colors (image-rs#2543)
  - Added a `hooks` module to customize builtin behavior, `register_format_detection_hook` and  `register_decoding_hook` for the determining format of a file and selecting an `ImageDecoder` implementation respectively. (image-rs#2372)

Performance improvements:
  - Gaussian blur (image-rs#2496) and box blur (image-rs#2515) are now faster
  - Improve compilation times by avoiding unnecessary instantiation of generic functions (image-rs#2468, image-rs#2470)

Bug fixes:
  - Many improvements to image format decoding: TIFF, WebP, AVIF, PNG, GIF, BMP, TGA
  - Fixed `GifEncoder::encode()` ignoring the speed parameter and always using the slowest speed (image-rs#2504)
  - `.pnm` is now recognized as a file extension for the PNM format (image-rs#2559)

v0.25.7

Toggle v0.25.7's commit message
Release 0.25.7

Features:
  - Added an API for external image format implementations to register themselves as decoders for a specific format in `image` (image-rs#2372)
  - Added [CICP](https://www.color.org/iccmax/download/CICP_tag_and_type_amendment.pdf) awarenes via [moxcms](https://crates.io/crates/moxcms) to support color spaces (image-rs#2531). The support for transforming is limited for now and will be gradually expanded.
  - You can now embed Exif metadata when writing JPEG, PNG and WebP images (image-rs#2537, image-rs#2539)
  - Added functions to extract orientation from Exif metadata and optionally clear it in the Exif chunk (image-rs#2484)
  - Serde support for more types (image-rs#2445)
  - PNM encoder now supports writing 16-bit images (image-rs#2431)

API improvements:
  - `save`, `save_with_format`, `write_to` and `write_with_encoder` methods on `DynamicImage` now automatically convert the pixel format when necessary instead of returning an error (image-rs#2501)
  - Added `DynamicImage::has_alpha()` convenience method
  - Implemented `TryFrom<ExtendedColorType>` for `ColorType` (image-rs#2444)
  - Added `const HAS_ALPHA` to trait `Pixel`
  - Unified the error for unsupported encoder colors (image-rs#2543)
  - Added a `hooks` module to customize builtin behavior, `register_format_detection_hook` and  `register_decoding_hook` for the determining format of a file and selecting an `ImageDecoder` implementation respectively. (image-rs#2372)

Performance improvements:
  - Gaussian blur (image-rs#2496) and box blur (image-rs#2515) are now faster
  - Improve compilation times by avoiding unnecessary instantiation of generic functions (image-rs#2468, image-rs#2470)

Bug fixes:
  - Many improvements to image format decoding: TIFF, WebP, AVIF, PNG, GIF, BMP, TGA
  - Fixed `GifEncoder::encode()` ignoring the speed parameter and always using the slowest speed (image-rs#2504)
  - `.pnm` is now recognized as a file extension for the PNM format (image-rs#2559)

v0.25.6

Toggle v0.25.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release 0.25.6 (image-rs#2441)

v0.25.5

Toggle v0.25.5's commit message

Verified

This tag was signed with the committer’s verified signature.
197g Aurelia Molzer
Release 0.25.5

Features:
 - Added support for decoding 10-bit and 12-bit AVIF
 - Initial, opt-in serde support for an enum. This may be extended to other types in the future.

Bug fixes:
 - [Multiple bug fixes in AVIF decoding](image-rs#2373)
 - The `rayon` feature now correctly toggles the use of `rayon` when encoding AVIF. (Previously it would be either always on or always off depending on the version of the `ravif` crate in your dependency tree.)
 - "jfif" file extension for JPEG images is now recognized

v0.25.4

Toggle v0.25.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request image-rs#2354 from image-rs/release-0.25.4

Propose wording for republishing as 0.25.4

v0.25.3

Toggle v0.25.3's commit message

Verified

This tag was signed with the committer’s verified signature.
197g Aurelia Molzer
Release 0.25.3

Features:
 - Much faster decoding of lossless WebP due to a variety of optimizations. Our benchmarks show 2x to 2.5x improvement.
 - Added support for orientation metadata, so that e.g. smartphone camera images could be displayed correctly:
   - Added `ImageDecoder::orientation()` and implemented orientation metadata extraction for JPEG, WebP and TIFF formats
   - Added `DynamicImage::apply_orientation()` to apply the orientation to an image
 - Added support for extracting Exif metadata from images via `ImageDecoder::exif_metadata()`, and implemented it for JPEG and WebP formats
 - Added `ImageEncoder::set_icc_profile()` and implemented it for WebP format. Pull requests with implementations for other formats are welcome.
 - Added `DynamicImage::fast_blur()` for a linear-time approximation of Gaussian blur, which is much faster at larger blur radii

Bug fixes:
 - Fixed some APNG images being decoded incorrectly
 - Fixed the iterator over animated WebP frames to return `None` instead of an error when the end of the animation is reached
 - Toggling the `rayon` feature now correctly toggles the use of `rayon` within `ravif` (AVIF encoder). Previously it would be either always on or always off, depending on the `ravif` version.

v0.25.2

Toggle v0.25.2's commit message

Verified

This tag was signed with the committer’s verified signature.
197g Aurelia Molzer
Release 0.25.2

Features:
- Added the HDR encoder to supported formats in generic write methods with the
  `hdr` feature enabled. Supports 32-bit float RGB color only, for now.
- When cloning `ImageBuffer`, `DynamicImage` and `Frame` the existing buffer
  will now be reused if possible.
- Added `image::ImageReader` as an alias.
- Implement `ImageEncoder` for `HdrEncoder`.

Structural changes
- Switch from `byteorder` to `byteorder-lite`, consolidating some casting
  unsafety to `bytemuck`.
- Many methods on `DynamicImage` and buffers gained `#[must_use]` indications.

Bug fixes:
- Removed test data included in the crate archive.
- The WebP animation decoder stops when reaching the indicate frame count.
- Fixed bugs in the `bmp` decoder.
- Format support gated on the `exr` feature now compiles in isolation.

v0.25.1

Toggle v0.25.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release 0.25.1 (image-rs#2187)