44 lines
874 B
JavaScript

import fs from "node:fs"
import path from "node:path"
import Sharp from "sharp"
const imageProcessingConf = {
sizeThreshold: 10 * 1024 * 1024,
imageQuality: 80,
}
const imageTypeToConfig = {
png: {
compressionLevel: Math.floor(imageProcessingConf.imageQuality / 100),
},
default: {
quality: imageProcessingConf.imageQuality,
},
}
export default async ({ filePath, workPath }) => {
const stat = await fs.promises.stat(file.filepath)
// ignore if too small
if (stat.size < imageProcessingConf.sizeThreshold) {
return file
}
let image = await Sharp(filePath)
const { format } = await image.metadata()
image = await image[format](
imageTypeToConfig[format] ?? imageTypeToConfig.default,
).withMetadata()
filePath = path.resolve(workPath, `${path.basename(filePath)}_ff`)
await image.toFile(outputFilepath)
return {
filePath: filePath,
}
}