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

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

月光魔力鸭

2020-12-24 01:25 阅读 1920 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
在我们做运维或者小工具的时候,总会有些需要提醒的事情,比如服务器宕机或者天气提醒,但是发email又会不够及时或者可能会忽略,那么短信就是一个不错的选择了
最近有客户提出了这么一个需求:微信dat文件在解码后的图片无法按照时间进行排序。 是的,解码后的文件的时间都是解码的时间,由于软件比较多,当时没做自动更新,所以在这里做一个小工具,可以将对应的解码后的图片的时间修改为微信dat文件对应的时间
通过pm2来实现nodejs应用的集群,不过我之前没做session共享,导致.. 登录不上啊 啊啊啊,无奈,又重新对redis进行了集成。
客户有一批音频需要处理成视频,最好是带有图片,于是就有了下文。
跑了一个千库网的自动签到,在windows上测试的时候好好的,图片也没问题,可是放到linux服务器就不行了,总是登录不上不说,图片都不一样
今天想在服务器上跑下自己自动签到的程序,需要安装puppeteer ,结果出错。 permission denied, mkdir '/root/.nvm/versions/node/v9.11.1/lib/node_modules/
最近又回归了下DNF ,玩了一段时间,感觉也挺没意思的,关键是平时更没意思,想着不行搞个自动刷图吧(先说结论,没成)
关于js的编译和压缩,之前做过一个小工具了,主要就是自己项目成员大都没有这部分的技能,导致发布的时候总需要去编译压缩下.. 最终做了个命令行小工具.. 问题不在这里,前一阵子做压缩的时候发现压缩后竟然是undefined.最终才发现是es6的语法问题。