Skip to content

起因就是想用一张图作为壁纸,但是壁纸太糊了,去找 ai 修复,结果 ai 让我关注微信号 才能下,所以我直接打开控制台看输出的图片 src,好家伙,是 base64 字符串,然后就想 到是否可以用 base64 字符串转图片,在网上查阅资料后成功写出该程序。

js
const { createReadStream, existsSync, writeFile } = require("fs");
const { resolve } = require("path");

/**
 * base64转图片 将源文件转成图片并输出到目标路径中
 * @param {string} srcPath 源路径
 * @param {string} destPath 目标路径
 */
async function base64ToImg(srcPath, destPath) {
  if (!existsSync(srcPath)) {
    console.log("源文件不存在!");
  }
  const res = await new Promise((r, j) => {
    let data = "";
    const rs = createReadStream(srcPath);

    rs.on("data", (chunk) => {
      data += chunk;
    });
    rs.on("end", () => {
      r(data);
    });
    rs.on("error", () => j("读取目标文件出错!"));
  });

  const base64 = res.replace(/^data:image\/\w+;base64,/, ""); //去掉图片base64码前面部分data:image/png;base64
  const dataBuffer = Buffer.from(base64, "base64");
  writeFile(destPath, dataBuffer, (err) => {
    if (err) {
      console.log("输出失败");
    } else {
      console.log("输出成功!");
    }
  });
}

base64ToImg(
  resolve(__dirname, "./input"),
  resolve(__dirname, `./output_${Date.now()}.png`)
);
const { createReadStream, existsSync, writeFile } = require("fs");
const { resolve } = require("path");

/**
 * base64转图片 将源文件转成图片并输出到目标路径中
 * @param {string} srcPath 源路径
 * @param {string} destPath 目标路径
 */
async function base64ToImg(srcPath, destPath) {
  if (!existsSync(srcPath)) {
    console.log("源文件不存在!");
  }
  const res = await new Promise((r, j) => {
    let data = "";
    const rs = createReadStream(srcPath);

    rs.on("data", (chunk) => {
      data += chunk;
    });
    rs.on("end", () => {
      r(data);
    });
    rs.on("error", () => j("读取目标文件出错!"));
  });

  const base64 = res.replace(/^data:image\/\w+;base64,/, ""); //去掉图片base64码前面部分data:image/png;base64
  const dataBuffer = Buffer.from(base64, "base64");
  writeFile(destPath, dataBuffer, (err) => {
    if (err) {
      console.log("输出失败");
    } else {
      console.log("输出成功!");
    }
  });
}

base64ToImg(
  resolve(__dirname, "./input"),
  resolve(__dirname, `./output_${Date.now()}.png`)
);