Как мне объединить образы в разногласиях. js для разобщенного бота? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь создать команду, которая объединяет аватар с изображением, например, столбцы тюрьмы на аватаре, если кто-то, например, напечатает = jail - я уже создал обработчик команды, который сортирует команду. Однако я не могу понять, как этого добиться. Я использую платформу windows (очевидно, это означает, что я не могу использовать узел gd)

1 Ответ

1 голос
/ 28 марта 2020

Вы можете использовать Jimp для этого. Вот сайт NPM: https://www.npmjs.com/package/jimp

Позволяет изменять картинки, добавлять текст и т. Д. c. То, что вы хотели бы, выглядело бы примерно так:

//an array of all images we're using. MAKE SURE THEIR SIZES MATCH
var images = [<link to the user's avatar>, <link to an image of jail bars>]
var jimps = []
//turns the images into readable variables for jimp, then pushes them into a new array
for (var i = 0; i < images.length; i++){
    jimps.push(jimp.read(images[i]))
}
//creates a promise to handle the jimps
await Promise.all(jimps).then(function(data) {
    return Promise.all(jimps)
}).then(async function(data){
    // --- THIS IS WHERE YOU MODIFY THE IMAGES --- \\
    data[0].composite(data[1], 0, 0) //adds the second specified image (the jail bars) on top of the first specified image (the avatar). "0, 0" define where the second image is placed, originating from the top left corner
    //you CAN resize the second image to fit the first one like this, if necessary. The "100, 100" is the new size in pixels.
    //data[1].resize(100,100)

    //this saves our modified image
    data[0].write(<path on your local disk to save the image in>)
})

Теперь все, что вам нужно сделать, это отправить изображение с локального диска:

message.channel.send(`Jailed!`, {file: `${<path to the image>}`})
...