Try both gray and indexed low depths
This commit is contained in:
parent
a426fabe13
commit
703ebb4813
1 changed files with 12 additions and 4 deletions
|
|
@ -143,14 +143,22 @@ pub(crate) fn perform_reductions(
|
||||||
|
|
||||||
// Attempt to reduce to a lower bit depth
|
// Attempt to reduce to a lower bit depth
|
||||||
if opts.bit_depth_reduction && !deadline.passed() {
|
if opts.bit_depth_reduction && !deadline.passed() {
|
||||||
// Try reducing the previous png, falling back to the indexed one if it exists
|
// First try reducing the `png` var (could be grayscale or indexed)
|
||||||
// This allows a grayscale depth reduction to be preferred over an indexed depth reduction
|
let reduced = reduced_bit_depth_8_or_less(&png);
|
||||||
let reduced = reduced_bit_depth_8_or_less(&png)
|
// It's possible that an indexed version will be smaller (it might reach a lower depth),
|
||||||
.or_else(|| indexed.and_then(|png| reduced_bit_depth_8_or_less(&png)));
|
// but grayscale is usually better so we'll skip it if we're doing cheap evaluations and
|
||||||
|
// already have a reduced image.
|
||||||
|
let try_indexed = !cheap || reduced.is_none();
|
||||||
if let Some(reduced) = reduced {
|
if let Some(reduced) = reduced {
|
||||||
eval.try_image(Arc::new(reduced));
|
eval.try_image(Arc::new(reduced));
|
||||||
evaluation_added = true;
|
evaluation_added = true;
|
||||||
}
|
}
|
||||||
|
if try_indexed && !deadline.passed() {
|
||||||
|
if let Some(reduced) = indexed.and_then(|png| reduced_bit_depth_8_or_less(&png)) {
|
||||||
|
eval.try_image(Arc::new(reduced));
|
||||||
|
evaluation_added = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if evaluation_added {
|
if evaluation_added {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue