const sharp = require('sharp'); const fs = require('fs'); const path = require('path'); // 常见图片格式 const imageExtensions = new Set(['jpg', 'jpeg', 'png', 'gif', 'webp', 'tiff', 'svg']); //图片文件夹路径 let inputDir = ''; //输出比例 const outputArr = [ { name: '主图1:1', scale: [1, 1], dir: '', }, { name: '主图3:4', scale: [3, 4], dir: '', }, ]; // 指定要查找的目录 const directoryPath = 'E:/商品资料'; // 函数获取最新创建的子文件夹路径 function getLatestFolder(directory) { let latestTime = 0; // 读取指定目录 fs.readdirSync(directory, { withFileTypes: true }).forEach((file) => { if (file.isDirectory()) { const folderPath = path.join(directory, file.name); const stats = fs.statSync(folderPath); const creationTime = stats.birthtimeMs; // 获取创建时间 // 找到最新创建的文件夹 if (creationTime > latestTime) { latestTime = creationTime; inputDir = folderPath; } } }); if (inputDir) { console.log('最新创建的文件夹路径:', inputDir); } else { console.log('没有找到子文件夹。'); } } // 调用函数 getLatestFolder(directoryPath); //创建输出文件夹 outputArr.forEach((item) => { item.dir = `${inputDir}/${item.scale.join('x')}`; if (!fs.existsSync(item.dir)) { fs.mkdirSync(item.dir); } }); async function resizeImage(imageDir, outputDir, scale) { let imgData = await sharp(imageDir).metadata(); await sharp(imageDir) .extract({ width: imgData.width, height: Math.floor(imgData.width / (scale[0] / scale[1])), left: 0, top: 0, }) .toFile(outputDir); } //读取输入目录下所有文件 fs.readdirSync(inputDir).forEach(async (file) => { console.log(file); const ext = file.split('.').pop().toLowerCase(); if (imageExtensions.has(ext)) { const inputPath = path.join(inputDir, file); outputArr.forEach((item) => { const outputPath = path.join(item.dir, file); resizeImage(inputPath, outputPath, item.scale) .then(() => { console.log(`${file}的${item.name}图片已生成`); }) .catch((err) => { console.error(`${file}的${item.name}图片生成失败`, err); }); }); } });