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:
@@ -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(),
|
||||
),
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user