feat(web/server): webp thumbnail size configurable (#3598)

* feat(server/web): webp thumbnail size configurable

* update api

* add ui and fix test

* lint

* setting for jpeg size

* feat: coerce to number

* api

* jpeg resolution

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
This commit is contained in:
Alex
2023-08-08 09:39:51 -05:00
committed by GitHub
parent 1812e8811b
commit ddd4ec2d9e
26 changed files with 429 additions and 18 deletions

View File

@@ -52,6 +52,9 @@ export enum SystemConfigKey {
PASSWORD_LOGIN_ENABLED = 'passwordLogin.enabled',
STORAGE_TEMPLATE = 'storageTemplate.template',
THUMBNAIL_WEBP_SIZE = 'thumbnail.webpSize',
THUMBNAIL_JPEG_SIZE = 'thumbnail.jpegSize',
}
export enum TranscodePolicy {
@@ -121,4 +124,8 @@ export interface SystemConfig {
storageTemplate: {
template: string;
};
thumbnail: {
webpSize: number;
jpegSize: number;
};
}

View File

@@ -12,7 +12,7 @@ export class MediaRepository implements IMediaRepository {
private logger = new Logger(MediaRepository.name);
crop(input: string, options: CropOptions): Promise<Buffer> {
return sharp(input, { failOnError: false })
return sharp(input, { failOn: 'none' })
.extract({
left: options.left,
top: options.top,
@@ -23,7 +23,7 @@ export class MediaRepository implements IMediaRepository {
}
async resize(input: string | Buffer, output: string, options: ResizeOptions): Promise<void> {
await sharp(input, { failOnError: false })
await sharp(input, { failOn: 'none' })
.resize(options.size, options.size, { fit: 'outside', withoutEnlargement: true })
.rotate()
.toFormat(options.format)