fix: create sharp file for fileHasAdjustments files or fileIsAnimated files (#6708)

## Description

Fixes #6694 

Previously we were only creating sharp files for files that have file
adjustments but instead a sharp file should be created for animated
images even if there are no file adjustments - i.e

`const fileHasAdjustments = fileSupportsResize && Boolean(resizeOptions
|| formatOptions || imageSizes || trimOptions || file.tempFilePath)`

- [x] I have read and understand the
[CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md)
document in this repository.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## Checklist:

- [x] Existing test suite passes locally with my changes
This commit is contained in:
Patrik
2024-06-11 10:55:51 -04:00
committed by GitHub
parent 57fcc9148e
commit 6512d5ce69

View File

@@ -133,21 +133,23 @@ export const generateFileData = async <T>({
if (fileIsAnimated) sharpOptions.animated = true
if (fileHasAdjustments && sharp) {
if (sharp && (fileIsAnimated || fileHasAdjustments)) {
if (file.tempFilePath) {
sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
} else {
sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
}
if (resizeOptions) {
sharpFile = sharpFile.resize(resizeOptions)
}
if (formatOptions) {
sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)
}
if (trimOptions) {
sharpFile = sharpFile.trim(trimOptions)
if (fileHasAdjustments) {
if (resizeOptions) {
sharpFile = sharpFile.resize(resizeOptions)
}
if (formatOptions) {
sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)
}
if (trimOptions) {
sharpFile = sharpFile.trim(trimOptions)
}
}
}
@@ -201,7 +203,6 @@ export const generateFileData = async <T>({
let fileForResize = file
if (cropData && sharp) {
const metadata = await sharpFile.metadata()
const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file, sharp })
filesToSave.push({
@@ -215,7 +216,11 @@ export const generateFileData = async <T>({
size: info.size,
}
fileData.width = info.width
fileData.height = fileIsAnimated ? info.height / metadata.pages : info.height
fileData.height = info.height
if (fileIsAnimated) {
const metadata = await sharpFile.metadata()
fileData.height = info.height / metadata.pages
}
fileData.filesize = info.size
if (file.tempFilePath) {