本地图片

首先是针对本地图片,在 Node.js 中,可以通过内置的 fs 模块读取图片文件,并将其转换为 Base64 编码。以下是一个示例代码:

示例代码

const fs = require('fs');

// 将图片转换为Base64
function imageToBase64(filePath) {
  return new Promise((resolve, reject) => {
    fs.readFile(filePath, (err, data) => {
      if (err) {
        reject(err);
      } else {
        resolve(data.toString('base64'));
      }
    });
  });
}

// 使用示例
const filePath = './example.jpg'; // 图片路径
imageToBase64(filePath)
  .then(base64String => {
    console.log('Base64编码:', base64String);
  })
  .catch(err => {
    console.error('出错:', err);
  });

代码解释

  1. fs.readFile:
    • 读取文件内容,返回一个 Buffer 对象。
  2. Buffer.toString('base64'):
    • Buffer 对象转换为 Base64 编码字符串。
  3. Promise:
    • 使用 Promise 处理异步操作,方便链式调用和错误处理。

运行步骤

  1. 保存上述代码到一个 .js 文件中(例如 imageToBase64.js)。
  2. 将图片路径替换为实际图片路径。
  3. 在终端运行: node imageToBase64.js

注意事项

  • 确保提供的图片路径是正确的。
  • 大图片可能生成非常大的 Base64 字符串,请注意内存占用。

网络图片

如果图片来源是 HTTP 请求,也可以通过库(如 axios)获取图片数据,然后转换为 Base64。

使用 axios

axios 是一个流行的 HTTP 客户端库,它支持处理二进制数据并返回 Buffer 对象。

安装 axios

npm install axios

示例代码:

const axios = require('axios');

// 获取网络图片并返回Buffer
async function fetchImageAsBuffer(url) {
try {
const response = await axios.get(url, { responseType: 'arraybuffer' });
const buffer = Buffer.from(response.data);
return buffer;
} catch (error) {
console.error('获取图片出错:', error);
}
}

// 使用示例
const imageUrl = 'https://example.com/image.jpg'; // 图片URL
fetchImageAsBuffer(imageUrl)
.then(buffer => {
console.log('图片Buffer:', buffer);
})
.catch(err => {
console.error('出错:', err);
});

代码解释:

  1. axios.get(url, { responseType: 'arraybuffer' })
    • 使用 axios 请求图片并将响应数据处理为 arraybuffer 格式。这样可以直接获取二进制数据。
  2. Buffer.from(response.data)
    • 将响应数据(arraybuffer)转换为 Buffer 对象。

拿到 Buffer 对象后我们再按前面的写法转成Base64即可。