This major release intends to improve the interface with regards to handling of
color format data and errors for both decoding and encoding. This necessitated
many breaking changes anyways so it was used to improve the compliance to the
interface guidelines such as outstanding renaming.
It is not yet perfect with regards to color spaces but it was designed mainly
as an improvement over the current interface with regards to in-memory color
formats, first. We'll get to color spaces in a later major version.
Heavily reworked ColorType:
This type is now used for denoting formats for which we support operations
on buffers in these memory representations. Particularly, all channels in
pixel types are assumed to be an integer number of bytes (In terms of the
Rust type system, these are Sized and one can crate slices of channel
values).
An ExtendedColorType is used to express more generic color formats for
which the library has limited support but can be converted/scaled/mapped
into a ColorType buffer. This operation might be fallible but, for
example, includes sources with 1/2/4-bit components.
Both types are non-exhaustive to add more formats in a minor release.
A work-in-progress (#1085) will further separate the color model from the
specific channel instantiation, e.g. both 8-bit RGB and 16-bit BGR
are instantiations of RGB color model.
Heavily rework ImageError:
The top-level enum type now serves to differentiate cause with multiple
opaque representations for the actual error. These are no longer simple
Strings but contains useful types. Third-party decoders that have no
variant in ImageFormat have also been considered.
Support for Error::source that can be downcast to an error from a
matching version of the underlying decoders. Note that the version is not
part of the stable interface guarantees, this should not be relied upon
for correctness and only be used as an optimization.
Added image format indications to errors.
The error values produced by decoder will be upgraded incrementally. See
something that still produces plain old String messages? Feel free to
send a PR.
Reworked the ImageDecoder trait:
read_image takes an output buffer argument instead of allocating all
memory on its own.
The return type of dimensions now aligns with GenericImage sizes.
The colortype method was renamed to color_type for conformity.
The enums ColorType, DynamicImage, imageops::FilterType, ImageFormat
no longer re-export all of their variants in the top-level of the crate. This
removes the growing pollution in the documentation and usage. You can still
insert the equivalent statement on your own:
use image::ImageFormat::{self, *};
The result of encode operations is now uniformly an ImageResult<()>.
Removed public converters from some tiff, png, gif, jpeg types,
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme
Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)
Updates the requirements on image to permit the latest version.
Changelog
Sourced from image's changelog.
Commits
dbb81ef
Update readme, change notes, meta datae50ebed
Merge pull request #1132 from image-rs/next140f4ea
Merge pull request #1131 from HeroicKatora/upstream-mastere3ab70d
Merge remote-tracking branch 'upstream/master' into upstream-master9dd1c44
Merge pull request #1128 from HeroicKatora/hide-num-ratio642f0a8
Merge pull request #1130 from HeroicKatora/release-0.22.5b6dacab
Add a saturating conversion from time::Duration633f247
Align naming to ratio68ad0cc
Add conversion of Delay into time::Duration85f163e
Update meta data for 0.22.5Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired)