## Summary
- introduce a shared line art conversion interface and proprietary
ImageMagick-backed implementation
- have the compress controller optionally autowire the enterprise
service before running per-image line art processing
- remove ImageMagick command details from core by delegating conversions
through the proprietary service

## Testing
- not run (not requested)


------
[Codex
Task](https://chatgpt.com/codex/tasks/task_b_6928aecceaf083289a9269b1ca99307e)

---------

Co-authored-by: James Brunton <[email protected]>
This commit is contained in:
Anthony Stirling
2025-12-15 11:14:10 +00:00
committed by GitHub
co-authored by James Brunton
parent 33188815da
commit 5f72c05623
24 changed files with 445 additions and 75 deletions
@@ -19,6 +19,11 @@ export const buildCompressFormData = (parameters: CompressParameters, file: File
}
formData.append("grayscale", parameters.grayscale.toString());
formData.append("lineArt", parameters.lineArt.toString());
if (parameters.lineArt) {
formData.append("lineArtThreshold", parameters.lineArtThreshold.toString());
formData.append("lineArtEdgeLevel", parameters.lineArtEdgeLevel.toString());
}
return formData;
};
@@ -4,6 +4,9 @@ import { useBaseParameters, BaseParametersHook } from '@app/hooks/tools/shared/u
export interface CompressParameters extends BaseParameters {
compressionLevel: number;
grayscale: boolean;
lineArt: boolean;
lineArtThreshold: number;
lineArtEdgeLevel: 1 | 2 | 3;
expectedSize: string;
compressionMethod: 'quality' | 'filesize';
fileSizeValue: string;
@@ -13,6 +16,9 @@ export interface CompressParameters extends BaseParameters {
export const defaultParameters: CompressParameters = {
compressionLevel: 5,
grayscale: false,
lineArt: false,
lineArtThreshold: 50,
lineArtEdgeLevel: 3,
expectedSize: '',
compressionMethod: 'quality',
fileSizeValue: '',