You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NodeJS的Tinify API批量处理目录图片(缩放与转WebP)

批量处理图片的解决方案

前置准备

  1. 确保已安装Tinify包:npm install tinify
  2. 去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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:34:53