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

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

月光魔力鸭

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
当我们做爬虫或其他的一些应用的时候,如果需要一些短信验证,但是又没有那么多手机号,又不能放人在那里一直输入的时候?怎么办?
产品版本更新的时候经常会有一些数据库的差异,如果版本管理好的话,一步一步升级即可.. 但是如果好久没更新的话,还是有很多不确定的,只能挨着比对表和字段。比对了一次就烦了,写了这么一个工具,查询差异表和字段并给出sql语句。
使用nodejs 连接mysql数据库还是很简单的,有现成的模块可以直接调用。下面介绍下 mysql 的调用
docker镜像中的puppeteer安装
通过nodejs来进行爬取页面的内容,这里简单试试做个小任务..
最近在折腾的时候又想写less了,但是换框架了,成了thinkjs,考虑到开发阶段一直编译编译less的情况..最终根据middleware的特点实现了一个超级简单的less中间件。
前段时间帮朋友下歌放在车上听..结果好多都是ncm格式,伤心 ,搜索了下发现基本上这格式解密有好多昂,可惜UI我都不太想要..决定抄一下,自己做一个。 这里先记录下核心代码,回头补充个UI 做个小程序。
写文章总会需要一些素材,但是好多素材都是收费或有限制的,还是我要求不高,在千库网看了下还不错,有各签到还送VIP,于是就有了想法....