1# Rust Image Release Notes
2
3Rust 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.
4
5## Known issues
6 - Interlaced (progressive) or animated images are not well supported.
7 - Images with *n* bit/channel (*n ≠ 8*) are not well supported.
8
9## Changes
10
11### Version 0.22.3
12
13- Added a new module `io` containing a configurable `Reader`. It can replace
14  the bunch of free functions: `image::{load_*, open, image_dimensions}` while
15  enabling new combinations such as `open` but with format deduced from content
16  instead of file path.
17- Fixed `const_err` lint in the macro expanded implementations of `Pixel`. This
18  can only affect your crate if `image` is used as a path dependency.
19
20### Version 0.22.2
21
22- Undeprecate `unsafe` trait accessors. Further evaluation showed that their
23  deprecation should be delayed until trait `impl` specialization is available.
24- Fixed magic bytes used to detect `tiff` images.
25- Added `DynamicImage::from_decoder`.
26- Fixed a bug in the `PNGReader` that caused an infinite loop.
27- Added `ColorType::{bits_per_pixel, num_components}`.
28- Added `ImageFormat::from_path`, same format deduction as the `open` method.
29- Fixed a panic in the gif decoder.
30- Aligned background color handling of `gif` to web browser implementations.
31- Fixed handling of partial frames in animated `gif`.
32- Removed unused direct `lzw` dependency, an indirect dependency in `tiff`.
33
34### Version 0.22.1
35
36- Fixed build without no features enabled
37
38### Version 0.22
39
40- The required Rust version is now `1.34.2`.
41- Note the website and blog: [image-rs.org][1] and [blog.image-rs.org][2]
42- `PixelMut` now only on `ImageBuffer` and removed from `GenericImage`
43  interface. Prefer iterating manually in the generic case.
44- Replaced an unsafe interface in the hdr decoder with a safe variant.
45- Support loading 2-bit BMP images
46- Add method to save an `ImageBuffer`/`DynamicImage` with specified format
47- Update tiff to `0.3` with a writer
48- Update png to `0.15`, fixes reading of interlaced sub-byte pixels
49- Always use custom struct for `ImageDecoder::Reader`
50- Added `apply_without_alpha` and `map_without_alpha` to `Pixel` trait
51- Pixel information now with associated constants instead of static methods
52- Changed color structs to tuple types with single component. Improves
53  ergonomics of destructuring assignment and construction.
54- Add lifetime parameter on `ImageDecoder` trait.
55- Remove unecessary `'static` bounds on affine operations
56- Add function to retrieve image dimensions without loading full image
57- Allow different image types in overlay and replace
58- Iterators over rows of `ImageBuffer`, mutable variants
59
60[1]: https://www.image-rs.org
61[2]: https://blog.image-rs.org
62
63### Version 0.21.2
64
65- Fixed a variety of crashes and opaque errors in webp
66- Updated the png limits to be less restrictive
67- Reworked even more `unsafe` operations into safe alternatives
68- Derived Debug on FilterType and Deref on Pixel
69- Removed a restriction on DXT to always require power of two dimensions
70- Change the encoding of RGBA in bmp using bitfields
71- Corrected various urls
72
73### Version 0.21.1
74
75- A fairly important bugfix backport
76- Fixed a potentially memory safety issue in the hdr and tiff decoders, see #885
77- See [the full advisory](docs/2019-04-23-memory-unsafety.md) for an analysis
78- Fixes `ImageBuffer` index calculation for very, very large images
79- Fix some crashes while parsing specific incomplete pnm images
80- Added comprehensive fuzzing for the pam image types
81
82### Version 0.21
83
84- Updated README to use `GenericImageView`
85- Removed outdated version number from CHANGES
86- Compiles now with wasm-unknown-emscripten target
87- Restructured `ImageDecoder` trait
88- Updated README with a more colorful example for the Julia fractal
89- Use Rust 1.24.1 as minimum supported version
90- Support for loading GIF frames one at a time with `animation::Frames`
91- The TGA decoder now recognizes 32 bpp as RGBA(8)
92- Fixed `to_bgra` document comment
93- Added release test script
94- Removed unsafe code blocks several places
95- Fixed overlay overflow bug issues with documented proofs
96
97### Version 0.20
98
99- Clippy lint pass
100- Updated num-rational dependency
101- Added BGRA and BGR color types
102- Improved performance of image resizing
103- Improved PBM decoding
104- PNM P4 decoding now returns bits instead of bytes
105- Fixed move of overlapping buffers in BMP decoder
106- Fixed some document comments
107- `GenericImage` and `GenericImageView` is now object-safe
108- Moved TIFF code to its own library
109- Fixed README examples
110- Fixed ordering of interpolated parameters in TIFF decode error string
111- Thumbnail now handles upscaling
112- GIF encoding for multiple frames
113- Improved subimages API
114- Cargo fmt fixes
115
116### Version 0.19
117
118- Fixed panic when blending with alpha zero.
119- Made `save` consistent.
120- Consistent size calculation.
121- Fixed bug in `apply_with_alpha`.
122- Implemented `TGADecoder::read_scanline`.
123- Use deprecated attribute for `pixels_mut`.
124- Fixed bug in JPEG grayscale encoding.
125- Fixed multi image TIFF.
126- PNM encoder.
127- Added `#[derive(Hash)]` for `ColorType`.
128- Use `num-derive` for `#[derive(FromPrimitive)]`.
129- Added `into_frames` implementation for GIF.
130- Made rayon an optional dependency.
131- Fixed issue where resizing image did not give exact width/height.
132- Improved downscale.
133- Added a way to expose options when saving files.
134- Fixed some compiler warnings.
135- Switched to lzw crate instead of using built-in version.
136- Added `ExactSizeIterator` implementations to buffer structs.
137- Added `resize_to_fill` method.
138- DXT encoding support.
139- Applied clippy suggestions.
140
141### Version 0.4
142 - Various improvements.
143 - Additional supported image formats (BMP and ICO).
144 - GIF and PNG codec moved into separate crates.
145
146### Version 0.3
147 - Replace `std::old_io` with `std::io`.
148
149### Version 0.2
150 - Support for interlaced PNG images.
151 - Writing support for GIF images (full color and paletted).
152 - Color quantizer that converts 32bit images to paletted including the alpha channel.
153 - Initial support for reading TGA images.
154 - Reading support for TIFF images (packbits and FAX compression not supported).
155 - Various bug fixes and improvements.
156
157### Version 0.1
158- Initial release
159- Basic reading support for png, jpeg, gif, ppm and webp.
160- Basic writing support for png and jpeg.
161- A collection of basic imaging processing function like `blur` or `invert`
162