通过gm来批量拼接图片,两张合并一张

通过gm来批量拼接图片,两张合并一张

月光魔力鸭

2020-12-24 01:25 阅读 2372 喜欢 2 图片拼接

刚好在做类似的事情,找了一部分绘本,想将绘本内的图片全部取出来合并。 我是通过nodejs调用gm模块来实现的拼接,命令很简单。

gm(leftFilePath).append(rightFilePath,true).write(collapseFilePath,(err)=>{});

依赖环境

两个安装好后,就可以执行代码了。对了,gm安装后要重启下。

将以下代码保存app.js 放在某个文件夹。

const gm = require('gm');
const fs = require('fs');
const path = require('path');

//假定目标目录为以下目录,且文件名称为1.jpg 2.jpg 3.jpg .且没有多级,只有一级,且没有其他多余文件....抱歉,要求有点多。
//如果文件名字不是这样的,那么需要对排序处做下处理。
const folderPath = 'D:\\nodejs\\toy\\ppt转pptx读取\\testcoll';
//该目录为合并后的文件存储目录
const targetFolder = 'D:\\nodejs\\toy\\ppt转pptx读取\\collapse';

function collapse (left,right,target) { 
  return new Promise((r, j) => {
    // gm(left).append(right).write(target, err => {//改行为上下拼接
    gm(left).append(right,true).write(target, err => {
      r();//忽略报错
    })
  })
}
(async function () { 
  let fileList = fs.readdirSync(folderPath);
  fileList.sort((a, b) => {
    return path.basename(a) - path.basename(b);
  })
  for (let index in fileList) { 
    index = parseInt(index, 10);
    if (index % 2 == 0) { 
      //以第一个文件名命名
      let targetFilePath = path.join(targetFolder, fileList[index]);
      let leftFile = path.join(folderPath, fileList[index]);
      let rightFile = path.join(folderPath, fileList[index + 1]);
      await collapse(leftFile,rightFile,targetFilePath);
    }
  }
  process.exit(0);
})();

保存代码到文件后,在文件空白处shift+右键打开命令行,安装模块:

npm install gm

然后执行:

node app

等待结果,查看是否正确。

需要拼接的图片 拼接后的图片

转载请注明出处: https://chrunlee.cn/article/nodejs-gm-append-image.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
经常会遇到需要系统重启后自动执行的一些任务,在windows 上可以将对应的程序打包成service 然后自启动即可
在使用marked来做md解析的时候,部分解析规则可能并不是很如意,比如说,我在md中写了a标签,但是这些标签都是在当前页面替换的,而我想要的是新打开窗口。
通过nodejs来进行爬取页面的内容,这里简单试试做个小任务..
最近看到知乎上一话题:微信公众号文章里的视频怎么下载?。看还是有很多人推荐啥工具啊,很是捉急,当然本次的主题也是通过程序来获取内容,但是目前来说仅仅是娱乐吧。
关于js的编译和压缩,之前做过一个小工具了,主要就是自己项目成员大都没有这部分的技能,导致发布的时候总需要去编译压缩下.. 最终做了个命令行小工具.. 问题不在这里,前一阵子做压缩的时候发现压缩后竟然是undefined.最终才发现是es6的语法问题。
分享一个自动抓取静态站资源的小工具,可以在抓取某个静态站点的时候方便很多,尤其是如果页面比较多的话,会很难受,而且会自动将资源进行归类,如果一个页面一个页面的保存的话,那就比较费劲了。
在日常开发中,经常会频繁的做一些重复性的操作,作为一名程序员,解放双手的时刻到了
尝试下使用nodejs下开源图像识别库来识别图像状态。