Nodejs 如何将svg动画文件转换为gif或视频文件

将svg转换为连续图片

使用无头浏览器的连续截图功能

import fs from "fs";
import puppeteer from "puppeteer";
import path from "path";
async function recordSvgAnimation(svgFile, outputImgDir, recordingTime) {
  //验证outputImgDir是否存在
  if (!fs.existsSync(outputImgDir)) {
    fs.mkdirSync(outputImgDir);
  }
  //截取svg文件名,然后创建对应的文件夹
  let svgFileName = path.basename(svgFile, ".svg");
  let svgFileDir = path.join(outputImgDir, svgFileName);
  if (!fs.existsSync(svgFileDir)) {
    fs.mkdirSync(svgFileDir);
  }

  const startTime = Date.now();
  // 启动无头浏览器
  const browser = await puppeteer.launch({ headless: true });

  // 创建新页面
  const page = await browser.newPage();

  // 导航到SVG文件
  await page.goto(`file://${svgFile}`, { waitUntil: "networkidle0" });
  // 开始录制动画的每一帧
  let images = [];
  //   let i = 0;
  while (Date.now() - startTime < recordingTime) {
    // 捕捉当前帧的图像数据
    const imageData = await page.screenshot({ encoding: "binary" });
    images.push(imageData);
  }
  for (let i = 0; i < images.length; i++) {
    let filePath = path.join(svgFileDir, i + ".png");
    fs.writeFileSync(filePath, images[i]);
  }

  // 关闭浏览器
  await browser.close();
}

// 指定SVG文件路径和输出GIF文件路径
const svgFile = "C:/Users/spike/Desktop/nodejstest/11912.svg";
const outputImgDir = "C:/Users/spike/Desktop/nodejstest/output";

// 调用函数录制SVG动画的每一帧并保存为GIF
recordSvgAnimation(svgFile, outputImgDir, 10000);

将连续图片转换为gif或者视频

使用ffcreator


作者:spike

分类: Nodejs

创作时间:2024-01-30

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1