Skip to content

图片

png转webp进行压缩

对项目进行打包后的体积老大了(也就是你现在看到的这个站点),发现也有很多图片资源(如果你对图片资源要求不高的话可以这样进行操作压缩),使用以下代码可以将图片进行压缩

点击查看代码
js
/**
 * 转换 PNG 为 WebP
 *
 * */
const path = require('path');
const fs = require('fs-extra');
const sharp = require('sharp');

// 配置项
const config = {
  inputDir: './wasm',           // 输入目录(你的 PNG 所在目录)
  outputDir: './wasm',          // 输出目录(可设为不同目录)
  quality: 80,                    // WebP 质量 (0-100)
  deleteOriginal: false,          // 是否删除原 PNG 文件
  recursive: true                // 是否递归处理子目录
};

async function convertPngToWebp(inputDir, outputDir) {
  // 确保输出目录存在
  await fs.ensureDir(outputDir);

  // 读取目录
  const files = await fs.readdir(inputDir);

  for (const file of files) {
    const inputPath = path.join(inputDir, file);
    const stat = await fs.stat(inputPath);

    if (stat.isDirectory() && config.recursive) {
      // 递归处理子目录
      const subOutputDir = path.join(outputDir, file);
      await convertPngToWebp(inputPath, subOutputDir);
    } else if (file.toLowerCase().endsWith('.png')) {
      const outputFileName = path.basename(file, '.png') + '.webp';
      const outputPath = path.join(outputDir, outputFileName);

      try {
        await sharp(inputPath)
          .webp({quality: config.quality})
          .toFile(outputPath);

        console.log(`✅ 转换成功: ${inputPath} → ${outputPath}`);

        // 删除原 PNG(可选)
        if (config.deleteOriginal) {
          await fs.unlink(inputPath);
          console.log(`🗑️  已删除: ${inputPath}`);
        }
      } catch (err) {
        console.error(`❌ 转换失败: ${inputPath}`, err.message);
      }
    }
  }
}

// 主函数
async function main() {
  console.log('🚀 开始转换 PNG 为 WebP...');
  console.log('配置:', config);

  try {
    await convertPngToWebp(config.inputDir, config.outputDir);
    console.log('🎉 所有图片转换完成!');
  } catch (err) {
    console.error('💥 转换过程中出错:', err);
  }
}

// 运行
main();

By Modify.