Библиотека GM Nodejs - как создать команду конвертирования для нескольких изображений, которые должны быть расположены последовательно - PullRequest
0 голосов
/ 21 сентября 2018

Что эквивалентно команде nodejs gm https://github.com/aheckmann/gm для этой команды imagemagick cli?

команда 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.Двоичные файлы Imagemagick предустановлены на лямбду.В дополнение к моему первоначальному вопросу, должен ли я просто использовать функциональность nodejs exec () для передачи этой строки или есть ли преимущество в использовании библиотеки gm nodejs?

1 Ответ

0 голосов
/ 25 сентября 2018

Технически, не ответ на мой оригинальный вопрос, а другой способ решения проблемы.Закончилось отказ от библиотеки 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)
    }
})
...