Я пытаюсь использовать метаданные для условного изменения размера изображения с резким, исходя из его ширины и высоты.
Это работает в моем приложении CLI:
для (const файл файлов) { //console.log (path.join (process.cwd (), targetDirectory, file));
const processedFile = path.join(process.cwd(), targetDirectory, file);
const metadata = await sharp(processedFile).metadata();
if (metadata.width > metadata.height) {
await sharp(processedFile)
.rotate()
.resize(1200, null)
.toFormat("jpg")
.jpeg({ quality: 90 })
.toFile(path.join(process.cwd(), file));
} else {
await sharp(processedFile)
.rotate()
.resize(null, 1200)
.toFormat("jpg")
.jpeg({ quality: 90 })
.toFile(path.join(process.cwd(), file));
}
}
console.log(chalk.green("Files successfully resized"));
Я пытаюсь добиться того же поведения на реальном веб-сервере, комбинируя его с multer и Загрузка s3 с использованием multer-s3-transform
:
transform: function(req, file, cb) {
cb(
null,
sharp()
.rotate()
.resize(1200, null)
.toFormat("jpg")
.jpeg({ quality: 90 })
);
}
Это работает, но я понятия не имею, как использовать метод metadata()
, поскольку я не передаю явно файл в точном экземпляре.
Все, что я пытался вызвать ошибку dest.on is not a function
.
Есть идеи, как этого добиться?