Rust image aims to be a pure-Rust implementation of various popular image formats. Accompanying reading/write support, rust image provides basic imaging processing function. See README.md
for further details.
- Interlaced (progressive) or animated images are not well supported.
- Images with n bit/channel (n ≠ 8) are not well supported.
- Added
GenericImage::copy_within
, specialized forImageBuffer
- Fixed decoding of interlaced
gif
files - Prepare for future compatibility of array
IntoIterator
in example code
- Added in-place variants for flip and rotate operations.
- The bmp encoder now checks if dimensions are valid for the format. It would previously write a subset or panic.
- Removed deprecated implementations of
Error::description
- Added
DynamicImage::into_*
which convert without an additional allocation. - The PNG encoder errors on unsupported color types where it had previously silently swapped color channels.
- Enabled saving images as
gif
withsave_buffer
.
- Added a new module
io
containing a configurableReader
. It can replace the bunch of free functions:image::{load_*, open, image_dimensions}
while enabling new combinations such asopen
but with format deduced from content instead of file path. - Fixed
const_err
lint in the macro expanded implementations ofPixel
. This can only affect your crate ifimage
is used as a path dependency.
- Undeprecate
unsafe
trait accessors. Further evaluation showed that their deprecation should be delayed until traitimpl
specialization is available. - Fixed magic bytes used to detect
tiff
images. - Added
DynamicImage::from_decoder
. - Fixed a bug in the
PNGReader
that caused an infinite loop. - Added
ColorType::{bits_per_pixel, num_components}
. - Added
ImageFormat::from_path
, same format deduction as theopen
method. - Fixed a panic in the gif decoder.
- Aligned background color handling of
gif
to web browser implementations. - Fixed handling of partial frames in animated
gif
. - Removed unused direct
lzw
dependency, an indirect dependency intiff
.
- Fixed build without no features enabled
- The required Rust version is now
1.34.2
. - Note the website and blog: image-rs.org and blog.image-rs.org
PixelMut
now only onImageBuffer
and removed fromGenericImage
interface. Prefer iterating manually in the generic case.- Replaced an unsafe interface in the hdr decoder with a safe variant.
- Support loading 2-bit BMP images
- Add method to save an
ImageBuffer
/DynamicImage
with specified format - Update tiff to
0.3
with a writer - Update png to
0.15
, fixes reading of interlaced sub-byte pixels - Always use custom struct for
ImageDecoder::Reader
- Added
apply_without_alpha
andmap_without_alpha
toPixel
trait - Pixel information now with associated constants instead of static methods
- Changed color structs to tuple types with single component. Improves ergonomics of destructuring assignment and construction.
- Add lifetime parameter on
ImageDecoder
trait. - Remove unecessary
'static
bounds on affine operations - Add function to retrieve image dimensions without loading full image
- Allow different image types in overlay and replace
- Iterators over rows of
ImageBuffer
, mutable variants
- Fixed a variety of crashes and opaque errors in webp
- Updated the png limits to be less restrictive
- Reworked even more
unsafe
operations into safe alternatives - Derived Debug on FilterType and Deref on Pixel
- Removed a restriction on DXT to always require power of two dimensions
- Change the encoding of RGBA in bmp using bitfields
- Corrected various urls
- A fairly important bugfix backport
- Fixed a potentially memory safety issue in the hdr and tiff decoders, see #885
- See the full advisory for an analysis
- Fixes
ImageBuffer
index calculation for very, very large images - Fix some crashes while parsing specific incomplete pnm images
- Added comprehensive fuzzing for the pam image types
- Updated README to use
GenericImageView
- Removed outdated version number from CHANGES
- Compiles now with wasm-unknown-emscripten target
- Restructured
ImageDecoder
trait - Updated README with a more colorful example for the Julia fractal
- Use Rust 1.24.1 as minimum supported version
- Support for loading GIF frames one at a time with
animation::Frames
- The TGA decoder now recognizes 32 bpp as RGBA(8)
- Fixed
to_bgra
document comment - Added release test script
- Removed unsafe code blocks several places
- Fixed overlay overflow bug issues with documented proofs
- Clippy lint pass
- Updated num-rational dependency
- Added BGRA and BGR color types
- Improved performance of image resizing
- Improved PBM decoding
- PNM P4 decoding now returns bits instead of bytes
- Fixed move of overlapping buffers in BMP decoder
- Fixed some document comments
GenericImage
andGenericImageView
is now object-safe- Moved TIFF code to its own library
- Fixed README examples
- Fixed ordering of interpolated parameters in TIFF decode error string
- Thumbnail now handles upscaling
- GIF encoding for multiple frames
- Improved subimages API
- Cargo fmt fixes
- Fixed panic when blending with alpha zero.
- Made
save
consistent. - Consistent size calculation.
- Fixed bug in
apply_with_alpha
. - Implemented
TGADecoder::read_scanline
. - Use deprecated attribute for
pixels_mut
. - Fixed bug in JPEG grayscale encoding.
- Fixed multi image TIFF.
- PNM encoder.
- Added
#[derive(Hash)]
forColorType
. - Use
num-derive
for#[derive(FromPrimitive)]
. - Added
into_frames
implementation for GIF. - Made rayon an optional dependency.
- Fixed issue where resizing image did not give exact width/height.
- Improved downscale.
- Added a way to expose options when saving files.
- Fixed some compiler warnings.
- Switched to lzw crate instead of using built-in version.
- Added
ExactSizeIterator
implementations to buffer structs. - Added
resize_to_fill
method. - DXT encoding support.
- Applied clippy suggestions.
- Various improvements.
- Additional supported image formats (BMP and ICO).
- GIF and PNG codec moved into separate crates.
- Replace
std::old_io
withstd::io
.
- Support for interlaced PNG images.
- Writing support for GIF images (full color and paletted).
- Color quantizer that converts 32bit images to paletted including the alpha channel.
- Initial support for reading TGA images.
- Reading support for TIFF images (packbits and FAX compression not supported).
- Various bug fixes and improvements.
- Initial release
- Basic reading support for png, jpeg, gif, ppm and webp.
- Basic writing support for png and jpeg.
- A collection of basic imaging processing function like
blur
orinvert