Auto edge filter

This commit is contained in:
Jake Archibald
2020-11-19 11:35:12 +00:00
parent a229662bed
commit 6ebf94d1b6
2 changed files with 36 additions and 13 deletions

View File

@@ -27,6 +27,7 @@ interface State {
edgePreservingFilter: number; edgePreservingFilter: number;
lossless: boolean; lossless: boolean;
slightLoss: boolean; slightLoss: boolean;
autoEdgePreservingFilter: boolean;
} }
const maxSpeed = 7; const maxSpeed = 7;
@@ -48,9 +49,10 @@ export class Options extends Component<Props, State> {
effort: maxSpeed - options.speed, effort: maxSpeed - options.speed,
quality: options.quality, quality: options.quality,
progressive: options.progressive, progressive: options.progressive,
edgePreservingFilter: options.epf, edgePreservingFilter: options.epf === -1 ? 2 : options.epf,
lossless: options.quality === 100, lossless: options.quality === 100,
slightLoss: options.lossyPalette, slightLoss: options.lossyPalette,
autoEdgePreservingFilter: options.epf === -1,
}; };
} }
@@ -86,7 +88,9 @@ export class Options extends Component<Props, State> {
speed: maxSpeed - optionState.effort, speed: maxSpeed - optionState.effort,
quality: optionState.lossless ? 100 : optionState.quality, quality: optionState.lossless ? 100 : optionState.quality,
progressive: optionState.progressive, progressive: optionState.progressive,
epf: optionState.edgePreservingFilter, epf: optionState.autoEdgePreservingFilter
? -1
: optionState.edgePreservingFilter,
nearLossless: 0, nearLossless: 0,
lossyPalette: optionState.lossless ? optionState.slightLoss : false, lossyPalette: optionState.lossless ? optionState.slightLoss : false,
}; };
@@ -112,6 +116,7 @@ export class Options extends Component<Props, State> {
edgePreservingFilter, edgePreservingFilter,
lossless, lossless,
slightLoss, slightLoss,
autoEdgePreservingFilter,
}: State, }: State,
) { ) {
// I'm rendering both lossy and lossless forms, as it becomes much easier when // I'm rendering both lossy and lossless forms, as it becomes much easier when
@@ -152,16 +157,34 @@ export class Options extends Component<Props, State> {
Quality: Quality:
</Range> </Range>
</div> </div>
<div class={style.optionOneCell}> <label class={style.optionInputFirst}>
<Range <Checkbox
min="0" name="autoEdgeFilter"
max="3" checked={autoEdgePreservingFilter}
value={edgePreservingFilter} onChange={this._inputChange(
onInput={this._inputChange('edgePreservingFilter', 'number')} 'autoEdgePreservingFilter',
> 'boolean',
Edge preserving filter: )}
</Range> />
</div> Auto edge filter
</label>
<Expander>
{!autoEdgePreservingFilter && (
<div class={style.optionOneCell}>
<Range
min="0"
max="3"
value={edgePreservingFilter}
onInput={this._inputChange(
'edgePreservingFilter',
'number',
)}
>
Edge preserving filter:
</Range>
</div>
)}
</Expander>
</div> </div>
)} )}
</Expander> </Expander>

View File

@@ -21,7 +21,7 @@ export const defaultOptions: EncodeOptions = {
speed: 4, speed: 4,
quality: 75, quality: 75,
progressive: false, progressive: false,
epf: 2, epf: -1,
nearLossless: 0, nearLossless: 0,
lossyPalette: false, lossyPalette: false,
}; };