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

Node.js中用merge-images配合canvas合并图片输出为空如何解决

错误原因

  • mergeImages 的then回调拿到的返回值是合并后图片的Base64编码字符串,你当前直接将存储Image实例的img变量赋值为该字符串,既没有触发画布绘制,也没有执行文件写入操作,本地的result.png自然不会被更新。
  • 你提前创建Canvas、加载空白result.png的逻辑是多余的,merge-images库内部已经完成了合并所需的画布初始化、素材加载绘制逻辑,不需要自行实现这部分内容。

正确实现代码

const mergeImages = require('merge-images');
const { Canvas, Image } = require('canvas');
const fs = require('fs');
const path = require('path');

mergeImages([
  // 用path.resolve处理路径,避免相对路径出错
  path.resolve(__dirname, './lunas_parts/1.png'),
  path.resolve(__dirname, './lunas_parts/2.png'),
  path.resolve(__dirname, './lunas_parts/3.png')
], {
  Canvas: Canvas,
  Image: Image,
  // 直接指定合并后图片的宽高
  width: 2880,
  height: 2880
})
.then(b64 => {
  // 移除Base64前缀,转换为可写入的Buffer
  const imgBuffer = Buffer.from(b64.split(',')[1], 'base64');
  // 写入本地文件
  fs.writeFileSync(path.resolve(__dirname, './result.png'), imgBuffer);
})
.catch(err => {
  // 捕获并打印错误,方便定位问题
  console.error('图片合并失败:', err);
  throw err;
});

注意事项

  • 执行脚本前不需要提前创建空白的result.png,代码执行后会自动生成该文件。
  • 要确保lunas_parts目录下的三张素材文件存在,且Node进程有对应目录的读写权限。

内容的提问来源于stack exchange,提问作者Luis de la Torre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:04