feat(imageresizer): add trim options (#2073)

* freat(imageresizer): add trim options

* fix(imageresizer): check for trimOptions config key

* feat: add trimOptions to original file upload, add test config

* chore: adjust sharp file ref

---------

Co-authored-by: Steven Thompson <steven@teamtailor.com>
Co-authored-by: Elliot DeNolf <denolfe@gmail.com>
This commit is contained in:
Steven Thompson
2023-04-24 18:09:04 +01:00
committed by GitHub
parent a0fd26602e
commit 0406548fe6
5 changed files with 59 additions and 2 deletions

View File

@@ -184,6 +184,14 @@ const collectionSchema = joi.object().keys({
format: joi.string(),
options: joi.object(),
}),
trimOptions: joi.alternatives().try(
joi.object().keys({
format: joi.string(),
options: joi.object(),
}),
joi.string(),
joi.number(),
),
}),
joi.boolean(),
),

View File

@@ -56,7 +56,7 @@ export const generateFileData = async <T>({
};
}
const { staticDir, imageSizes, disableLocalStorage, resizeOptions, formatOptions } = collectionConfig.upload;
const { staticDir, imageSizes, disableLocalStorage, resizeOptions, formatOptions, trimOptions } = collectionConfig.upload;
let staticPath = staticDir;
if (staticDir.indexOf('/') !== 0) {
@@ -85,7 +85,7 @@ export const generateFileData = async <T>({
if (fileIsAnimated) sharpOptions.animated = true;
if (fileSupportsResize && (resizeOptions || formatOptions)) {
if (fileSupportsResize && (resizeOptions || formatOptions || trimOptions)) {
if (file.tempFilePath) {
sharpFile = sharp(file.tempFilePath, sharpOptions);
} else {
@@ -99,6 +99,9 @@ export const generateFileData = async <T>({
if (formatOptions) {
sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options);
}
if (trimOptions) {
sharpFile = sharpFile.trim(trimOptions);
}
}
if (isImage(file.mimetype)) {

View File

@@ -77,6 +77,10 @@ export default async function resizeAndSave({
resized = resized.toFormat(desiredSize.formatOptions.format, desiredSize.formatOptions.options);
}
if (desiredSize.trimOptions) {
resized = resized.trim(desiredSize.trimOptions);
}
const bufferObject = await resized.toBuffer({
resolveWithObject: true,
});

View File

@@ -41,9 +41,16 @@ export type ImageUploadFormatOptions = {
options?: Parameters<Sharp['toFormat']>[1]
}
/**
* Params sent to the sharp trim() function
* @link https://sharp.pixelplumbing.com/api-resize#trim
*/
export type ImageUploadTrimOptions = Parameters<Sharp['trim']>[0]
export type ImageSize = ResizeOptions & {
name: string
formatOptions?: ImageUploadFormatOptions
trimOptions?: ImageUploadTrimOptions
/**
* @deprecated prefer position
*/
@@ -64,6 +71,7 @@ export type IncomingUploadType = {
resizeOptions?: ResizeOptions
/** Options for original upload file only. For sizes, set each formatOptions individually. */
formatOptions?: ImageUploadFormatOptions
trimOptions?: ImageUploadTrimOptions
}
export type Upload = {
@@ -77,6 +85,7 @@ export type Upload = {
handlers?: any[]
resizeOptions?: ResizeOptions;
formatOptions?: ImageUploadFormatOptions
trimOptions?: ImageUploadTrimOptions
}
export type File = {