如何用NodeJS的Tinify API批量处理目录图片(缩放与转WebP)
批量处理图片的解决方案
前置准备
- 确保已安装Tinify包:
npm install tinify - 去Tinify官网获取API密钥,替换代码中的密钥占位符(免费额度每月500张)
1. 批量缩放目录下所有图片
以下代码会读取指定目录中的jpg/png格式图片,按配置尺寸缩放后保存到新目录(避免覆盖原文件):
const tinify = require('tinify'); const fs = require('fs').promises; const path = require('path'); // 替换为你的Tinify API密钥 tinify.key = "YOUR_TINIFY_API_KEY"; // 配置项 const inputDir = "./images"; // 原图片存放目录 const outputDir = "./resized-images"; // 缩放后图片保存目录 const resizeOptions = { method: "cover", width: 720, height: 225 }; async function batchResizeImages() { // 自动创建输出目录(不存在则生成) await fs.mkdir(outputDir, { recursive: true }); // 读取目录内所有文件 const files = await fs.readdir(inputDir); // 筛选出图片格式文件 const imageFiles = files.filter(file => { const ext = path.extname(file).toLowerCase(); return ['.jpg', '.jpeg', '.png'].includes(ext); }); // 逐个处理图片 for (const file of imageFiles) { try { const inputPath = path.join(inputDir, file); // 生成带标识的输出文件名,比如"example.jpg" → "example-small.jpg" const fileName = path.basename(file, path.extname(file)); const outputPath = path.join(outputDir, `${fileName}-small${path.extname(file)}`); // 执行缩放并保存 const source = tinify.fromFile(inputPath); const resized = source.resize(resizeOptions); await resized.toFile(outputPath); console.log(`处理完成:${file} → ${outputPath}`); } catch (err) { console.error(`处理${file}失败:`, err.message); } } } // 启动批量缩放 batchResizeImages();
2. 批量转换目录下图片为WebP格式
以下代码会将指定目录中的jpg/png图片转换为WebP格式,保存到独立目录:
const tinify = require('tinify'); const fs = require('fs').promises; const path = require('path'); // 替换为你的Tinify API密钥 tinify.key = "YOUR_TINIFY_API_KEY"; // 配置项 const inputDir = "./images"; // 原图片存放目录 const outputDir = "./webp-images"; // WebP图片保存目录 async function batchConvertToWebP() { // 自动创建输出目录(不存在则生成) await fs.mkdir(outputDir, { recursive: true }); // 读取目录内所有文件 const files = await fs.readdir(inputDir); // 筛选出图片格式文件 const imageFiles = files.filter(file => { const ext = path.extname(file).toLowerCase(); return ['.jpg', '.jpeg', '.png'].includes(ext); }); // 逐个处理图片 for (const file of imageFiles) { try { const inputPath = path.join(inputDir, file); // 生成WebP格式的输出文件名,比如"example.jpg" → "example.webp" const fileName = path.basename(file, path.extname(file)); const outputPath = path.join(outputDir, `${fileName}.webp`); // 执行格式转换并保存 const source = tinify.fromFile(inputPath); const converted = source.convert({ type: ["image/webp"] }); await converted.toFile(outputPath); console.log(`转换完成:${file} → ${outputPath}`); } catch (err) { console.error(`转换${file}失败:`, err.message); } } } // 启动批量转换 batchConvertToWebP();
注意事项
- 免费版Tinify每月限制500张图片处理量,超出需付费
- 代码使用异步语法,确保Node.js版本在v14及以上
- 输出目录自动创建,不会修改原目录的图片文件
内容的提问来源于stack exchange,提问作者Stenchaholic
相关产品推荐
相关产品推荐

