【问题标题】:Nodejs gm library - how to create convert command for multiple images to be layered in sequenceNodejs gm库-如何为要按顺序分层的多个图像创建转换命令
【发布时间】:2018-09-20 21:26:12
【问题描述】:

这个 imagemagick cli 命令的等效 nodejs gm 库 https://github.com/aheckmann/gm 命令是什么?

imagemagick cli 命令在透明背景上分层多个图像:

convert -size 669x122 xc:none img1.jpg -geometry +223+0 -composite 
        img2.jpg -geometry +251+46 -composite 
        img3.png -geometry +283+46 -composite 
        img4.jpg -geometry +446+61 -composite 
        img5.jpg -geometry +223+61 -composite 
        img6.jpg -geometry +0+61 -composite 
        output.png

gm 库命令将是:?

const gm = require('gm').subClass({
    imageMagick: true // im binaries are already installed on lambda functions
})

gm()
.out('-size 669x122 xc:none 
       img1.jpg -geometry +223+0 -composite 
       img2.jpg -geometry +251+46 -composite 
       img3.png -geometry +283+46 -composite 
       img4.jpg -geometry +446+61 -composite 
       img5.jpg -geometry +223+61 -composite 
       img6.jpg -geometry +0+61 -composite 
       output.png')
.write()

我是 nodejs 新手,它将在 aws lambda 函数上运行。 Imagemagick 二进制文件预装在 lambda 上。除了我最初的问题,我应该只使用 exec() nodejs 功能来传递这个字符串还是使用 nodejs gm 库有好处?

【问题讨论】:

  • 你必须在node...stackoverflow.com/q/37586684/2836621中添加很多大括号和圆括号和点才能做任何事情。
  • 是的,但是我将如何遍历具有 x/y 坐标的图像数组来创建带有点的 gm 调用?在文档中我看到:“如果 gm 没有为您提供您需要的方法或无法按您的意愿工作,您可以简单地使用 gm().in() 或 gm().out() 设置您自己的论据。”我想我会做一些测试,但希望熟悉 gm 的人能够指导我更快一点。

标签: node.js aws-lambda imagemagick graphicsmagick gm


【解决方案1】:

从技术上讲,这不是我最初问题的答案,而是解决问题的另一种方法。最终放弃了 gm npm 库,只使用了 exec()。仍然想知道 .out 是否有效或正确。

这是 nodejs 代码库的一部分,用于使用 imagemagick 创建具有多层的图像。

const exec = require('child_process').exec

let command = []

for (let i = 0; i < my['images'].length; i++) {
    if (i === 0) {
        command.push('convert')
        command.push(`-size ${my['canvas_width']}x${my['canvas_height']} xc:none`)
    }

    command.push(`${local}${my['images'][i]['image']}`)
    command.push(`-geometry +${my['images'][i]['x']}+${my['images'][i]['y']}`)
    command.push('-composite')
}

command.push(`${local}${outputImage}`)
command = command.join(' ')

console.log(command)

exec(command, (err, stdout, stderr) => {
    if (err) {
        next(`${err} ${stdout} ${stderr}`)
    } else {
        next(null)
    }
})

【讨论】:

    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多