35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
const Canvas = require(`canvas`);
|
|
|
|
const GIFEncoder = require(`gifencoder`);
|
|
|
|
module.exports = class Triggered {
|
|
/**
|
|
* Triggered
|
|
* @param {image} image
|
|
* @param {number} timeout
|
|
*/
|
|
async getImage(image, timeout = 15) {
|
|
if (!image) throw new Error(`You must provide an image as a first argument.`);
|
|
if (isNaN(timeout)) throw new Error(`The timeout argument must be a number.`);
|
|
const base = await Canvas.loadImage(`${__dirname}/../../assets/triggered.png`);
|
|
const img = await Canvas.loadImage(image);
|
|
const GIF = new GIFEncoder(256, 310);
|
|
GIF.start();
|
|
GIF.setRepeat(0);
|
|
GIF.setDelay(timeout);
|
|
const canvas = Canvas.createCanvas(256, 310);
|
|
const ctx = canvas.getContext(`2d`);
|
|
const BR = 20;
|
|
const LR = 10;
|
|
for (var i = 0; i < 9; i++) {
|
|
ctx.clearRect(0, 0, 256, 310);
|
|
ctx.drawImage(img, Math.floor(Math.random() * BR) - BR, Math.floor(Math.random() * BR) - BR, 256 + BR, 310 - 54 + BR);
|
|
ctx.fillStyle = `#FF000033`;
|
|
ctx.fillRect(0, 0, 256, 310);
|
|
ctx.drawImage(base, Math.floor(Math.random() * LR) - LR, 310 - 54 + Math.floor(Math.random() * LR) - LR, 256 + LR, 54 + LR);
|
|
GIF.addFrame(ctx);
|
|
}
|
|
GIF.finish();
|
|
return GIF.out.getData();
|
|
}
|
|
}; |