@@ -236,23 +236,58 @@ export const generateFileData = async <T>({
236
236
withMetadata,
237
237
} )
238
238
239
- filesToSave . push ( {
240
- buffer : croppedImage ,
241
- path : `${ staticPath } /${ fsSafeName } ` ,
242
- } )
239
+ // Apply resize after cropping to ensure it conforms to resizeOptions
240
+ if ( resizeOptions ) {
241
+ const resizedAfterCrop = await sharp ( croppedImage )
242
+ . resize ( {
243
+ fit : resizeOptions ?. fit || 'cover' ,
244
+ height : resizeOptions ?. height ,
245
+ position : resizeOptions ?. position || 'center' ,
246
+ width : resizeOptions ?. width ,
247
+ } )
248
+ . toBuffer ( { resolveWithObject : true } )
249
+
250
+ filesToSave . push ( {
251
+ buffer : resizedAfterCrop . data ,
252
+ path : `${ staticPath } /${ fsSafeName } ` ,
253
+ } )
243
254
244
- fileForResize = {
245
- ...file ,
246
- data : croppedImage ,
247
- size : info . size ,
248
- }
249
- fileData . width = info . width
250
- fileData . height = info . height
251
- if ( fileIsAnimatedType ) {
252
- const metadata = await sharpFile . metadata ( )
253
- fileData . height = metadata . pages ? info . height / metadata . pages : info . height
255
+ fileForResize = {
256
+ ...fileForResize ,
257
+ data : resizedAfterCrop . data ,
258
+ size : resizedAfterCrop . info . size ,
259
+ }
260
+
261
+ fileData . width = resizedAfterCrop . info . width
262
+ fileData . height = resizedAfterCrop . info . height
263
+ if ( fileIsAnimatedType ) {
264
+ const metadata = await sharpFile . metadata ( )
265
+ fileData . height = metadata . pages
266
+ ? resizedAfterCrop . info . height / metadata . pages
267
+ : resizedAfterCrop . info . height
268
+ }
269
+ fileData . filesize = resizedAfterCrop . info . size
270
+ } else {
271
+ // If resizeOptions is not present, just save the cropped image
272
+ filesToSave . push ( {
273
+ buffer : croppedImage ,
274
+ path : `${ staticPath } /${ fsSafeName } ` ,
275
+ } )
276
+
277
+ fileForResize = {
278
+ ...file ,
279
+ data : croppedImage ,
280
+ size : info . size ,
281
+ }
282
+
283
+ fileData . width = info . width
284
+ fileData . height = info . height
285
+ if ( fileIsAnimatedType ) {
286
+ const metadata = await sharpFile . metadata ( )
287
+ fileData . height = metadata . pages ? info . height / metadata . pages : info . height
288
+ }
289
+ fileData . filesize = info . size
254
290
}
255
- fileData . filesize = info . size
256
291
257
292
if ( file . tempFilePath ) {
258
293
await fs . promises . writeFile ( file . tempFilePath , croppedImage ) // write fileBuffer to the temp path
0 commit comments