diff --git a/.github/workflows/npm-publish.yaml b/.github/workflows/npm-publish.yaml
new file mode 100644
index 0000000..a77be50
--- /dev/null
+++ b/.github/workflows/npm-publish.yaml
@@ -0,0 +1,47 @@
+name: Node.js package
+
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - master
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ - run: npm ci
+ - run: npm test
+
+ publish-npm:
+ needs: build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ registry-url: https://registry.npmjs.org/
+ - run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.npm_token}}
+
+ publish-gpr:
+ needs: build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ registry-url: https://npm.pkg.github.com/
+ scope: '@your-github-username'
+ - run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
diff --git a/.gitignore b/.gitignore
index fa6a87f..e86962e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
node_modules/
package-lock.json
test/
-all.js
pas fait/
\ No newline at end of file
diff --git a/README.md b/README.md
index c2011d1..8638ddf 100644
--- a/README.md
+++ b/README.md
@@ -17,30 +17,6 @@ A correct and understandable issue contains :
You can also join me on my discord server.
-# Changelog
-
-## v0.1.9
-- Added options for the wanted.
- - The base image has been updated
- - There is now a random price diplayed
- - You can now configure a currency
-- Added .thomas()
-
-## v0.1.11
-- Added .tatoo()
-- Updated JSDoc
-
-## v1.1.12
-- Saved all examples to imgur
-
-## v1.1.13
-- Added example for .tatoo()
-- Fixed the litle hole at the top of the users pic on .thomas()
-
-## v1.1.14
-- Updated .thomas() example
-
-
# Download
You can download it from npmjs.
@@ -78,7 +54,7 @@ bot.on("message", async (message) => {
// Get the avatarUrl of the user
let avatar = message.author.displayAvatarURL({ dynamic: false, format: 'png' });
// Make the image
- let img = await DIG.delete(avatar)
+ let img = await DIG.delete().getImage(avatar)
// Add the image as an attachement
let attach = new Discord.MessageAttachment(img, "delete.png");;
message.channel.send(attach)
@@ -91,102 +67,154 @@ bot.login("super_secret_token")
# Available images
-- .blur(``, ``);
-![Blur](https://imgur.com/JqpNFTY.png)
+## Filters
-- .facepalm(``);
+- .Blur().getImage(``, ``);
-![Facepalm](https://imgur.com/cdPC3P1.png)
+![Blur](https://imgur.com/JqpNFTY.png)
-- .gay(``);
+- .Gay().getImage(``);
![Gay](https://imgur.com/BDTrXzZ.png)
-- .rip(``);
+- .Greyscale().getImage(``);
-![RIP](https://imgur.com/MgsRH8o.png)
+![Greyscale](https://imgur.com/h3ahY7Z.png)
-- .trash(``);
+- .Invert().getImage(``);
-![Trash](https://imgur.com/nwAHGgF.png)
+![Invert](https://imgur.com/Rl0wGQM.png)
-- .circle(``);
+- .Sepia().getImage(``);
-![Circle](https://imgur.com/0Zo8NYS.png)
+![Sepia](https://imgur.com/OTbKVtj.png)
-- .greyscale(``);
-![Greyscale](https://imgur.com/h3ahY7Z.png)
+## Gifs
-- .kiss(``, ``);
+- .Blink().getImage()
-![Kiss](https://imgur.com/sSoCAeH.png)
+![Blink](https://imgur.com/JjUXmRU.gif)
-- .sepia(``);
+- .Triggered().getImage(``);
-![Sepia](https://imgur.com/OTbKVtj.png)
+![Triggered](https://imgur.com/0QvyYQa.gif)
-- .mms(``);
-![MMS](https://imgur.com/nH3URHb.png)
+## Montage
-- .spank(``, ``);
+- .Affect().getImage(``);
-![Spank](https://imgur.com/VRvogo7.png)
+![Affect](https://imgur.com/g4Gaehb.png)
-- .color(``);
+- .Batslap().getImage(``, ``);
-> An hex color is needed, like "#FF0000"
+![Batslap](https://imgur.com/oYMpa5A.png)
-![Color](https://imgur.com/40tMwfe.png)
+- .Beautiful().getImage(``);
-- .triggered(``);
+![Beautiful](https://imgur.com/HGZkmXo.png)
+
+- .Bed().getImage(``, ``);
-![Triggered](https://imgur.com/0QvyYQa.png)
+![Bed](https://imgur.com/b1idSnr.png)
-- .hitler(``);
+- .Delete().getImage(``);
+
+![Delete](https://imgur.com/6V1IYJp.png)
+
+- .Facepalm().getImage(``);
+
+![Facepalm](https://imgur.com/cdPC3P1.png)
+
+- .Hitler().getImage(``);
![Hitler](https://imgur.com/wK9puxH.png)
-- .batslap(``, ``);
+- .Jail().getImage(``);
-![Batslap](https://imgur.com/oYMpa5A.png)
+![Jail](https://imgur.com/QslACNo.png)
-- .bed(``, ``);
+- .Kiss().getImage(``, ``);
-![Bed](https://imgur.com/b1idSnr.png)
+![Kiss](https://imgur.com/sSoCAeH.png)
-- .invert(``);
+- .Mms().getImage(``);
-![Invert](https://imgur.com/Rl0wGQM.png)
+![MMS](https://imgur.com/nH3URHb.png)
+
+- .Rip().getImage(``);
+
+![RIP](https://imgur.com/MgsRH8o.png)
+
+- .Spank().getImage(``, ``);
-- .wanted(``, ``);
+![Spank](https://imgur.com/VRvogo7.png)
+
+- .Tatoo().getImage(``)
+
+![Tatoo](https://imgur.com/wJju4UJ.png)
+
+- .Thomas().getImage(``);
+
+![Thomas](https://imgur.com/7R37J2j.png)
+
+- .Trash().getImage(``);
+
+![Trash](https://imgur.com/nwAHGgF.png)
+
+- .Wanted().getImage(``, ``);
> Currency ($, €, ...)
![Wanted](https://imgur.com/SFGRvSK.png)
-- .beautiful(``);
-![Beautiful](https://imgur.com/HGZkmXo.png)
+## Utils
-- .jail(``);
+- .Circle().getImage(``);
-![Jail](https://imgur.com/QslACNo.png)
+![Circle](https://imgur.com/0Zo8NYS.png)
-- .affect(``);
+- .Color().getImage(``);
-![Affect](https://imgur.com/g4Gaehb.png)
+> An hex color is needed, like "#FF0000"
-- .delete(``);
+![Color](https://imgur.com/40tMwfe.png)
-![Delete](https://imgur.com/6V1IYJp.png)
+# Changelog
-- .thomas(``);
+## v1.0.0
+- Changed the full structure
+ - Sorted all files in folders
+ - Sorted all files in the README
+- Fixed .wanted() text bug
+- Added .blink()
+- Added a timeout options for .triggered()
+- Fixed the triggered example not animated
+- Added some keywords
+- Bumped jimp from ^0.12.1 to ^0.13.0
+- Added workflow to auto publish to npm and github packages on push
-![Thomas](https://imgur.com/7R37J2j.png)
-- .tatoo(``)
+## v0.1.14
+- Updated .thomas() example
+
+## v0.1.13
+- Added example for .tatoo()
+- Fixed the litle hole at the top of the users pic on .thomas()
+
+## v0.1.12
+- Saved all examples to imgur
+
+## v0.1.11
+- Added .tatoo()
+- Updated JSDoc
-![Tatoo](https://imgur.com/wJju4UJ.png)
\ No newline at end of file
+## v0.1.9
+- Added options for the wanted.
+ - The base image has been updated
+ - There is now a random price diplayed
+ - You can now configure a currency
+- Added .thomas()
\ No newline at end of file
diff --git a/package.json b/package.json
index 84d1dcd..f6f78fd 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,10 @@
{
"name": "discord-image-generation",
- "version": "0.1.14",
+ "version": "1.0.0",
"description": "discord-image-generation is a powerfull module that allow you to generate awesome images.",
"main": "src/index.js",
"scripts": {
- "test": "node test/index.js"
+ "test": "node src/index.js"
},
"author": "Mr¤KayJayDee (https://github.com/Mr-KayJayDee)",
"license": "MIT",
@@ -21,11 +21,16 @@
"images",
"generation",
"gif",
- "manipulation"
+ "manipulation",
+ "canvas",
+ "jimp",
+ "photo",
+ "picture",
+ "drawing"
],
"dependencies": {
"canvas": "^2.6.1",
"gifencoder": "^2.0.1",
- "jimp": "^0.12.1"
+ "jimp": "^0.13.0"
}
}
diff --git a/src/index.js b/src/index.js
index 9c69868..ac1b7c8 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,2 +1,56 @@
-const DiscordImageGeneration = require("./module/DIG")
-module.exports = Object.assign(DiscordImageGeneration)
\ No newline at end of file
+Blur = require('./module/filters/blur')
+Gay = require('./module/filters/gay')
+Greyscale = require('./module/filters/greyscale')
+Invert = require('./module/filters/invert')
+Sepia = require('./module/filters/sepia')
+
+Triggered = require('./module/gif/triggered')
+Blink = require('./module/gif/blink')
+
+Affect = require('./module/montage/affect')
+Batslap = require('./module/montage/batslap')
+Beautiful = require('./module/montage/beautiful')
+Bed = require('./module/montage/bed')
+Delete = require('./module/montage/delete')
+Facepalm = require('./module/montage/facepalm')
+Hitler = require('./module/montage/hitler')
+Jail = require('./module/montage/jail')
+Kiss = require('./module/montage/kiss')
+Mms = require('./module/montage/mms')
+Rip = require('./module/montage/rip')
+Spank = require('./module/montage/spank')
+Tatoo = require('./module/montage/tatoo')
+Thomas = require('./module/montage/thomas')
+Trash = require('./module/montage/trash')
+Wanted = require('./module/montage/wanted')
+
+Circle = require('./module/utils/circle')
+Color = require('./module/utils/color')
+
+module.exports = {
+ Blur,
+ Gay,
+ Greyscale,
+ Invert,
+ Sepia,
+ Triggered,
+ Blink,
+ Affect,
+ Batslap,
+ Beautiful,
+ Bed,
+ Delete,
+ Facepalm,
+ Hitler,
+ Jail,
+ Kiss,
+ Mms,
+ Rip,
+ Spank,
+ Tatoo,
+ Thomas,
+ Trash,
+ Wanted,
+ Circle,
+ Color,
+}
\ No newline at end of file
diff --git a/src/module/DIG.js b/src/module/DIG.js
deleted file mode 100644
index 7a38662..0000000
--- a/src/module/DIG.js
+++ /dev/null
@@ -1,456 +0,0 @@
-const Canvas = require("canvas");
-
-const jimp = require("jimp");
-
-const GIFEncoder = require("gifencoder");
-
-const configure = require('@jimp/custom')
-
-const circle = require('@jimp/plugin-circle')
-
-configure({ plugins: [circle] }, jimp);
-
-class DIG {
-
- /**
- * Beautiful
- * @param {image} image
- */
- static async beautiful(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let base = await jimp.read(__dirname +"/assets/beautiful.png");
- base.resize(376, 400);
- let img = await jimp.read(image);
- img.resize(84, 95);
- base.composite(img, 258, 28);
- base.composite(img, 258, 229);
- let raw;
- base.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Facepalm
- * @param {image} image
- */
- static async facepalm(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let canvas = Canvas.createCanvas(632, 357);
- let ctx = canvas.getContext("2d");
- ctx.fillStyle = "black";
- ctx.fillRect(0, 0, 632, 357);
- let avatar = await Canvas.loadImage(image);
- ctx.drawImage(avatar, 199, 112, 235, 235);
- let layer = await Canvas.loadImage(__dirname +"/assets/facepalm.png");
- ctx.drawImage(layer, 0, 0, 632, 357);
- return canvas.toBuffer();
- }
-
- /**
- * Gay
- * @param {image} image
- */
- static async gay(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await Canvas.loadImage(__dirname +"/assets/gay.png");
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(480, 480);
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0, 480, 480);
- ctx.drawImage(bg, 0, 0, 480, 480);
- return canvas.toBuffer();
- }
-
- /**
- * Kiss
- * @param {image1} image1
- * @param {image2} image2
- */
- static async kiss(image1, image2) {
- if (!image1) throw new Error("You must provide an image as a first argument.");
- if (!image2) throw new Error("You must provide an image as a second argument.");
- let base = await jimp.read(__dirname+"/assets/kiss.png");
- image1 = await jimp.read(image1);
- image2 = await jimp.read(image2);
- image1.circle();
- image2.circle();
- base.resize(768, 574);
- image1.resize(200, 200);
- image2.resize(200, 200);
- base.composite(image1, 150, 25);
- base.composite(image2, 350, 25);
- let raw;
- base.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Rip
- * @param {image} image
- */
- static async rip(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- const canvas = Canvas.createCanvas(244, 253);
- const ctx = canvas.getContext("2d");
- const background = await Canvas.loadImage(__dirname +"/assets/rip.png");
- ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
- const avatar = await Canvas.loadImage(image);
- ctx.drawImage(avatar, 63, 110, 90, 90);
- return canvas.toBuffer();
- }
-
- /**
- * Spank
- * @param {image1} image1
- * @param {image2} image2
- */
- static async spank(image1, image2) {
- if (!image1) throw new Error("You must provide an image as a first argument.");
- if (!image2) throw new Error("You must provide an image as a second argument.");
- let bg = await jimp.read(__dirname +"/assets/spank.png");
- image1 = await jimp.read(image1);
- image2 = await jimp.read(image2);
- image1.circle();
- image2.circle();
- bg.resize(500, 500);
- image1.resize(140, 140);
- image2.resize(120, 120);
- bg.composite(image2, 350, 220);
- bg.composite(image1, 225, 5);
- let raw;
- bg.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Batslap
- * @param {image1} image1
- * @param {image2} image2
- */
- static async batslap(image1, image2) {
- if (!image1) throw new Error("You must provide an image as a first argument.");
- if (!image2) throw new Error("You must provide an image as a second argument.");
- let base = await jimp.read(__dirname+"/assets/batslap.png");
- image1 = await jimp.read(image1);
- image2 = await jimp.read(image2);
- image1.circle();
- image2.circle();
- base.resize(1000, 500);
- image1.resize(220, 220);
- image2.resize(200, 200);
- base.composite(image2, 580, 260);
- base.composite(image1, 350, 70);
- let raw;
- base.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Affect
- * @param {image} image
- */
- static async affect(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let base = await jimp.read(__dirname + "/assets/affect.png");
- let img = await jimp.read(image);
- img.resize(200, 157);
- base.composite(img, 180, 383);
- let raw;
- base.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Blur
- * @param {image} image
- * @param {number} level
- */
- static async blur(image, level = 5) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- image = await jimp.read(image);
- image.resize(480, 480)
- image.blur(isNaN(level) ? 5 : parseInt(level));
- let raw;
- image.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Geryscale
- * @param {image} image
- */
- static async greyscale(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- image = await jimp.read(image);
- image.resize(480, 480)
- image.greyscale();
- let raw;
- image.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Sepia
- * @param {image} image
- */
- static async sepia(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- image = await jimp.read(image);
- image.resize(480, 480)
- image.sepia();
- let raw;
- image.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Invert
- * @param {image} image
- */
- static async invert(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- image = await jimp.read(image);
- image.resize(480, 480)
- image.invert();
- let raw;
- image.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Delete
- * @param {image} image
- */
- static async delete(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await jimp.read(__dirname + "/assets/delete.png");
- image = await jimp.read(image);
- image.resize(195, 195);
- bg.composite(image, 120, 135);
- let raw;
- bg.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Trash
- * @param {image} image
- */
- static async trash(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await jimp.read(__dirname +"/assets/trash.png");
- image = await jimp.read(image);
- image.resize(309, 309);
- image.blur(5);
- bg.composite(image, 309, 0);
- let raw;
- bg.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Color
- * @param {color} color
- */
- static async color(color = "#FFFFFF") {
- const canvas = Canvas.createCanvas(2048, 2048);
- const ctx = canvas.getContext("2d");
- ctx.fillStyle = color;
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- return canvas.toBuffer();
- }
-
- /**
- * Hitler
- * @param {image} image
- */
- static async hitler(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await jimp.read(__dirname + "/assets/hitler.png");
- let img = await jimp.read(image);
- img.resize(140, 140);
- bg.composite(img, 46, 43);
- let raw;
- bg.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Bed
- * @param {image1} image1
- * @param {image2} image2
- */
- static async bed(image1, image2) {
- if (!image1) throw new Error("You must provide an image as a first argument.");
- if (!image2) throw new Error("You must provide an image as a second argument.");
- let bg = await jimp.read(__dirname +"/assets/bed.png");
- image1 = await jimp.read(image1);
- image2 = await jimp.read(image2);
- image1.circle();
- image2.circle();
- image1.resize(100, 100);
- image2.resize(70, 70);
- let image3 = image1.clone().resize(70, 70);
- bg.composite(image1, 25, 100);
- bg.composite(image1, 25, 300);
- bg.composite(image3, 53, 450);
- bg.composite(image2, 53, 575);
- let raw;
- bg.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Wanted
- * @param {image} image
- */
- static async wanted(image, currency) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- if (!currency) currency = "$"
- if (typeof currency != "string") throw new Error("You must provide a string for the currency.")
- if (currency.length > 1) throw new Error("You must provide only one character for the currency.")
- var price = Math.floor(Math.random() * 1887088) + 329889
- const canvas = Canvas.createCanvas(257, 383);
- const ctx = canvas.getContext("2d");
- const avatar = await Canvas.loadImage(image);
- const background = await Canvas.loadImage(__dirname +"/assets/wanted.png");
- ctx.drawImage(avatar, 25, 60, 210, 210);
- ctx.drawImage(background, 0, 0, 257, 383);
- ctx.font = 'Bold 35px Times New Roman'
- ctx.fillStyle = "#513d34"
- ctx.fillText(price.toLocaleString() + currency, 55, 310)
- return canvas.toBuffer();
- }
-
- /**
- * Triggered
- * @param {image} image
- */
- static async triggered(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- 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(15);
- 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();
- }
-
- /**
- * Circle
- * @param {image} image
- */
- static async circle(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- image = await jimp.read(image);
- image.resize(480, 480);
- image.circle();
- let raw;
- image.getBuffer("image/png", (err, buffer) => {
- raw = buffer;
- });
- return raw;
- }
-
- /**
- * Jail
- * @param {image} image
- */
- static async jail(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await Canvas.loadImage(__dirname +"/assets/jail.png");
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(400, 400);
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0, 400, 400);
- ctx.drawImage(bg, 0, 0, 400, 400);
- return canvas.toBuffer();
- }
-
- /**
- * MMS
- * @param {image} image
- */
- static async mms(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- let bg = await Canvas.loadImage(__dirname +"/assets/mms.png");
- let img = await Canvas.loadImage(image);
- const canvas = Canvas.createCanvas(400, 400);
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 70, 20, 250, 250);
- ctx.drawImage(bg, 0, 0, 400, 400);
- return canvas.toBuffer();
- }
-
- /**
- * Thomas
- * @param {image} image
- */
- static async thomas(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- const canvas = Canvas.createCanvas(841, 1058);
- const ctx = canvas.getContext("2d");
- const avatar = await Canvas.loadImage(image);
- const background = await Canvas.loadImage(__dirname +"/assets/thomas.png");
- ctx.drawImage(avatar, 220, 190, 400, 400);
- ctx.drawImage(background, 0, 0, 841, 1058);
- return canvas.toBuffer();
- }
-
- /**
- * Tatoo
- * @param {image} image
- */
- static async tatoo(image) {
- if (!image) throw new Error("You must provide an image as a first argument.");
- const canvas = Canvas.createCanvas(750, 1089);
- const ctx = canvas.getContext("2d");
- const avatar = await Canvas.loadImage(image);
- const background = await Canvas.loadImage(__dirname +"/assets/tatoo.png");
- ctx.drawImage(avatar, 145, 575, 400, 400);
- ctx.drawImage(background, 0, 0, 750, 1089);
- return canvas.toBuffer();
- }
-}
-
-module.exports = DIG;
diff --git a/src/module/filters/blur.js b/src/module/filters/blur.js
new file mode 100644
index 0000000..0b7e075
--- /dev/null
+++ b/src/module/filters/blur.js
@@ -0,0 +1,20 @@
+const jimp = require("jimp");
+
+module.exports = class Blur {
+ /**
+ * Blur
+ * @param {image} image
+ * @param {level} level
+ */
+ async getImage(image, level) {
+ if (!image) throw new Error(`You must provide an image.`);
+ image = await jimp.read(image);
+ image.resize(480, 480)
+ image.blur(isNaN(level) ? 5 : parseInt(level));
+ let raw;
+ image.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/filters/gay.js b/src/module/filters/gay.js
new file mode 100644
index 0000000..66c8ad1
--- /dev/null
+++ b/src/module/filters/gay.js
@@ -0,0 +1,18 @@
+const Canvas = require("canvas");
+
+module.exports = class Gay {
+ /**
+ * Gay
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await Canvas.loadImage(`../src/module/assets/gay.png`);
+ let img = await Canvas.loadImage(image);
+ const canvas = Canvas.createCanvas(480, 480);
+ const ctx = canvas.getContext(`2d`);
+ ctx.drawImage(img, 0, 0, 480, 480);
+ ctx.drawImage(bg, 0, 0, 480, 480);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/filters/greyscale.js b/src/module/filters/greyscale.js
new file mode 100644
index 0000000..ffa7c7c
--- /dev/null
+++ b/src/module/filters/greyscale.js
@@ -0,0 +1,19 @@
+const jimp = require("jimp");
+
+module.exports = class Geryscale {
+ /**
+ * Greyscale
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ image = await jimp.read(image);
+ image.resize(480, 480)
+ image.greyscale();
+ let raw;
+ image.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/filters/invert.js b/src/module/filters/invert.js
new file mode 100644
index 0000000..645611e
--- /dev/null
+++ b/src/module/filters/invert.js
@@ -0,0 +1,19 @@
+const jimp = require("jimp");
+
+module.exports = class Invert {
+ /**
+ * Invert
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ image = await jimp.read(image);
+ image.resize(480, 480)
+ image.invert();
+ let raw;
+ image.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/filters/sepia.js b/src/module/filters/sepia.js
new file mode 100644
index 0000000..94a1d81
--- /dev/null
+++ b/src/module/filters/sepia.js
@@ -0,0 +1,19 @@
+const jimp = require("jimp");
+
+module.exports = class Sepia {
+ /**
+ * Sepia
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ image = await jimp.read(image);
+ image.resize(480, 480)
+ image.sepia();
+ let raw;
+ image.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/functions.js b/src/module/functions.js
new file mode 100644
index 0000000..dbadc2d
--- /dev/null
+++ b/src/module/functions.js
@@ -0,0 +1,18 @@
+module.exports = {
+ /**
+ * Crate a responsive on the text
+ * Code from https://discordjs.guide/popular-topics/canvas.html#adding-in-text
+ * @param {object} canvas the canvas object
+ * @param {string} text the text
+ * @param {number} defaultFontSize the default font size
+ * @param {number} width the default width
+ * @param {string} font the font
+ */
+ applyText(canvas, text, defaultFontSize, width, font) {
+ const ctx = canvas.getContext("2d");
+ do {
+ ctx.font = `${(defaultFontSize -= 1)-3}px ${font}`;
+ } while (ctx.measureText(text).width > width);
+ return ctx.font;
+ }
+}
\ No newline at end of file
diff --git a/src/module/gif/blink.js b/src/module/gif/blink.js
new file mode 100644
index 0000000..1775b24
--- /dev/null
+++ b/src/module/gif/blink.js
@@ -0,0 +1,38 @@
+const Canvas = require(`canvas`);
+
+const GIFEncoder = require(`gifencoder`);
+
+module.exports = class Blink {
+ /**
+ * Blink
+ * @param {image} image1
+ * @param {image} image2
+ * @param {number} timeout
+ * @param {number} height For later
+ * @param {number} width For later
+ */
+ async getImage(image1, image2, timeout = 1000, height, width) {
+ if (!image1) throw new Error(`You must provide an image as a first argument.`);
+ if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ if (isNaN(timeout)) throw new Error(`The timeout argument must be a number.`)
+ const img = await Canvas.loadImage(image1);
+ const base = await Canvas.loadImage(image2);
+ const GIF = new GIFEncoder(480, 480)
+ GIF.start();
+ GIF.setRepeat(0);
+ GIF.setDelay(timeout);
+ GIF.setTransparent();
+ const canvas = Canvas.createCanvas(480, 480);
+ const ctx = canvas.getContext('2d');
+ ctx.clearRect(0, 0, 480, 480);
+ ctx.drawImage(img, 0, 0, 480, 480);
+ GIF.addFrame(ctx);
+ const ctx2 = canvas.getContext('2d');
+ ctx2.clearRect(0, 0, 480, 480);
+ ctx2.drawImage(base, 0, 0, 480, 480);
+ GIF.addFrame(ctx2)
+ GIF.finish();
+ console.log(GIF.out.getData())
+ return GIF.out.getData();
+ }
+}
\ No newline at end of file
diff --git a/src/module/gif/triggered.js b/src/module/gif/triggered.js
new file mode 100644
index 0000000..1a6bcb2
--- /dev/null
+++ b/src/module/gif/triggered.js
@@ -0,0 +1,35 @@
+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.`);
+ if (isNaN(timeout)) throw new Error(`The timeout argument must be a number.`)
+ const base = await Canvas.loadImage(`../src/module/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();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/affect.js b/src/module/montage/affect.js
new file mode 100644
index 0000000..436ff15
--- /dev/null
+++ b/src/module/montage/affect.js
@@ -0,0 +1,20 @@
+const jimp = require("jimp");
+
+module.exports = class Affect {
+ /**
+ * Affect
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error("You must provide an image.");
+ let base = await jimp.read(`../src/module/assets/affect.png`);
+ let img = await jimp.read(image);
+ img.resize(200, 157);
+ base.composite(img, 180, 383);
+ let raw;
+ base.getBuffer("image/png", (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/batslap.js b/src/module/montage/batslap.js
new file mode 100644
index 0000000..946682c
--- /dev/null
+++ b/src/module/montage/batslap.js
@@ -0,0 +1,28 @@
+const jimp = require("jimp");
+
+module.exports = class Batslap {
+ /**
+ * Batslap
+ * @param {image} image1
+ * @param {image} image2
+ */
+ async getImage(image1, image2) {
+ if (!image1) throw new Error("You must provide an image as a first argument.");
+ if (!image2) throw new Error("You must provide an image as a second argument.");
+ let base = await jimp.read(`../src/module/assets/batslap.png`);
+ image1 = await jimp.read(image1);
+ image2 = await jimp.read(image2);
+ image1.circle();
+ image2.circle();
+ base.resize(1000, 500);
+ image1.resize(220, 220);
+ image2.resize(200, 200);
+ base.composite(image2, 580, 260);
+ base.composite(image1, 350, 70);
+ let raw;
+ base.getBuffer("image/png", (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/beautiful.js b/src/module/montage/beautiful.js
new file mode 100644
index 0000000..6b5355f
--- /dev/null
+++ b/src/module/montage/beautiful.js
@@ -0,0 +1,22 @@
+const jimp = require("jimp");
+
+module.exports = class Beautiful {
+ /**
+ * Beautiful
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error("You must provide an image.");
+ let base = await jimp.read(`../src/module/assets/beautiful.png`);
+ base.resize(376, 400);
+ let img = await jimp.read(image);
+ img.resize(84, 95);
+ base.composite(img, 258, 28);
+ base.composite(img, 258, 229);
+ let raw;
+ base.getBuffer("image/png", (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/bed.js b/src/module/montage/bed.js
new file mode 100644
index 0000000..a16186b
--- /dev/null
+++ b/src/module/montage/bed.js
@@ -0,0 +1,30 @@
+const jimp = require("jimp");
+
+module.exports = class Bed {
+ /**
+ * Bed
+ * @param {image} image1
+ * @param {image} image2
+ */
+ async getImage(image1, image2) {
+ if (!image1) throw new Error(`You must provide an image as a first argument.`);
+ if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ let bg = await jimp.read(`../src/module/assets/bed.png`);
+ image1 = await jimp.read(image1);
+ image2 = await jimp.read(image2);
+ image1.circle();
+ image2.circle();
+ image1.resize(100, 100);
+ image2.resize(70, 70);
+ let image3 = image1.clone().resize(70, 70);
+ bg.composite(image1, 25, 100);
+ bg.composite(image1, 25, 300);
+ bg.composite(image3, 53, 450);
+ bg.composite(image2, 53, 575);
+ let raw;
+ bg.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/delete.js b/src/module/montage/delete.js
new file mode 100644
index 0000000..fb4fdc4
--- /dev/null
+++ b/src/module/montage/delete.js
@@ -0,0 +1,20 @@
+const jimp = require("jimp");
+
+module.exports = class Delete {
+ /**
+ * Delete
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await jimp.read(`../src/module/assets/delete.png`);
+ image = await jimp.read(image);
+ image.resize(195, 195);
+ bg.composite(image, 120, 135);
+ let raw;
+ bg.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/facepalm.js b/src/module/montage/facepalm.js
new file mode 100644
index 0000000..93bb6fc
--- /dev/null
+++ b/src/module/montage/facepalm.js
@@ -0,0 +1,20 @@
+const Canvas = require("canvas");
+
+module.exports = class Facepalm {
+ /**
+ * Facepalm
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error("You must provide an image.");
+ let canvas = Canvas.createCanvas(632, 357);
+ let ctx = canvas.getContext("2d");
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, 632, 357);
+ let avatar = await Canvas.loadImage(image);
+ ctx.drawImage(avatar, 199, 112, 235, 235);
+ let layer = await Canvas.loadImage(`../src/module/assets/facepalm.png`);
+ ctx.drawImage(layer, 0, 0, 632, 357);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/hitler.js b/src/module/montage/hitler.js
new file mode 100644
index 0000000..1e4f901
--- /dev/null
+++ b/src/module/montage/hitler.js
@@ -0,0 +1,20 @@
+const jimp = require("jimp");
+
+module.exports = class Hitler {
+ /**
+ * Hitler
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await jimp.read(`../src/module/assets/hitler.png`);
+ let img = await jimp.read(image);
+ img.resize(140, 140);
+ bg.composite(img, 46, 43);
+ let raw;
+ bg.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/jail.js b/src/module/montage/jail.js
new file mode 100644
index 0000000..541f047
--- /dev/null
+++ b/src/module/montage/jail.js
@@ -0,0 +1,18 @@
+const Canvas = require("canvas");
+
+module.exports = class Jail {
+ /**
+ * Jail
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await Canvas.loadImage(`../src/module/assets/jail.png`);
+ let img = await Canvas.loadImage(image);
+ const canvas = Canvas.createCanvas(400, 400);
+ const ctx = canvas.getContext(`2d`);
+ ctx.drawImage(img, 0, 0, 400, 400);
+ ctx.drawImage(bg, 0, 0, 400, 400);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/kiss.js b/src/module/montage/kiss.js
new file mode 100644
index 0000000..c86e729
--- /dev/null
+++ b/src/module/montage/kiss.js
@@ -0,0 +1,28 @@
+const jimp = require("jimp");
+
+module.exports = class Kiss {
+ /**
+ * Kiss
+ * @param {image} image1
+ * @param {image} image2
+ */
+ async getImage(image1, image2) {
+ if (!image1) throw new Error(`You must provide an image as a first argument.`);
+ if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ let base = await jimp.read(`../src/module/assets/kiss.png`);
+ image1 = await jimp.read(image1);
+ image2 = await jimp.read(image2);
+ image1.circle();
+ image2.circle();
+ base.resize(768, 574);
+ image1.resize(200, 200);
+ image2.resize(200, 200);
+ base.composite(image1, 150, 25);
+ base.composite(image2, 350, 25);
+ let raw;
+ base.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/mms.js b/src/module/montage/mms.js
new file mode 100644
index 0000000..55c0eae
--- /dev/null
+++ b/src/module/montage/mms.js
@@ -0,0 +1,18 @@
+const Canvas = require("canvas");
+
+module.exports = class Mms {
+ /**
+ * MMS
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await Canvas.loadImage(`../src/module/assets/mms.png`);
+ let img = await Canvas.loadImage(image);
+ const canvas = Canvas.createCanvas(400, 400);
+ const ctx = canvas.getContext(`2d`);
+ ctx.drawImage(img, 60, 10, 270, 270);
+ ctx.drawImage(bg, 0, 0, 400, 400);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/rip.js b/src/module/montage/rip.js
new file mode 100644
index 0000000..c6c281b
--- /dev/null
+++ b/src/module/montage/rip.js
@@ -0,0 +1,20 @@
+const Canvas = require("canvas");
+const jimp = require("jimp");
+
+module.exports = class Rip {
+ /**
+ * Rip
+ * @param {image} image
+ */
+
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ const canvas = Canvas.createCanvas(244, 253);
+ const ctx = canvas.getContext(`2d`);
+ const background = await Canvas.loadImage(`../src/module/assets/rip.png`);
+ ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
+ const avatar = await Canvas.loadImage(image);
+ ctx.drawImage(avatar, 63, 110, 90, 90);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/spank.js b/src/module/montage/spank.js
new file mode 100644
index 0000000..676233d
--- /dev/null
+++ b/src/module/montage/spank.js
@@ -0,0 +1,28 @@
+const jimp = require("jimp");
+
+module.exports = class Spank {
+ /**
+ *
+ * @param {image} image1
+ * @param {image} image2
+ */
+ async getImage(image1, image2) {
+ if (!image1) throw new Error(`You must provide an image as a first argument.`);
+ if (!image2) throw new Error(`You must provide an image as a second argument.`);
+ let bg = await jimp.read(`../src/module/assets/spank.png`);
+ image1 = await jimp.read(image1);
+ image2 = await jimp.read(image2);
+ image1.circle();
+ image2.circle();
+ bg.resize(500, 500);
+ image1.resize(140, 140);
+ image2.resize(120, 120);
+ bg.composite(image2, 350, 220);
+ bg.composite(image1, 225, 5);
+ let raw;
+ bg.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/tatoo.js b/src/module/montage/tatoo.js
new file mode 100644
index 0000000..426e2c3
--- /dev/null
+++ b/src/module/montage/tatoo.js
@@ -0,0 +1,18 @@
+const Canvas = require("canvas");
+
+module.exports = class Tatoo {
+ /**
+ * Tatoo
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ const canvas = Canvas.createCanvas(750, 1089);
+ const ctx = canvas.getContext(`2d`);
+ const avatar = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`../src/module/assets/tatoo.png`);
+ ctx.drawImage(avatar, 145, 575, 400, 400);
+ ctx.drawImage(background, 0, 0, 750, 1089);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/thomas.js b/src/module/montage/thomas.js
new file mode 100644
index 0000000..a50f75e
--- /dev/null
+++ b/src/module/montage/thomas.js
@@ -0,0 +1,18 @@
+const Canvas = require("canvas");
+
+module.exports = class Thomas {
+ /**
+ * Thomas
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ const canvas = Canvas.createCanvas(841, 1058);
+ const ctx = canvas.getContext(`2d`);
+ const avatar = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`../src/module/assets/thomas.png`);
+ ctx.drawImage(avatar, 220, 190, 400, 400);
+ ctx.drawImage(background, 0, 0, 841, 1058);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/trash.js b/src/module/montage/trash.js
new file mode 100644
index 0000000..c410fd0
--- /dev/null
+++ b/src/module/montage/trash.js
@@ -0,0 +1,21 @@
+const jimp = require("jimp");
+
+module.exports = class Trash {
+ /**
+ * Trash
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ let bg = await jimp.read(`../src/module/assets/trash.png`);
+ image = await jimp.read(image);
+ image.resize(309, 309);
+ image.blur(5);
+ bg.composite(image, 309, 0);
+ let raw;
+ bg.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/montage/wanted.js b/src/module/montage/wanted.js
new file mode 100644
index 0000000..9f17ca7
--- /dev/null
+++ b/src/module/montage/wanted.js
@@ -0,0 +1,27 @@
+const Canvas = require("canvas");
+const {
+ applyText
+} = require(`../functions`);
+
+module.exports = class Wanted {
+ /**
+ * Wanted
+ * @param {image} image
+ */
+ async getImage(image, currency = "$") {
+ if (!image) throw new Error(`You must provide an image.`);
+ if (typeof currency != `string`) throw new Error(`You must provide a string for the currency.`)
+ if (currency.length > 1) throw new Error(`You must provide only one character for the currency.`)
+ var price = Math.floor(Math.random() * 188708) + 329889
+ const canvas = Canvas.createCanvas(257, 383);
+ const ctx = canvas.getContext(`2d`);
+ const avatar = await Canvas.loadImage(image);
+ const background = await Canvas.loadImage(`../src/module/assets/wanted.png`);
+ ctx.drawImage(avatar, 25, 60, 210, 210);
+ ctx.drawImage(background, 0, 0, 257, 383);
+ ctx.font = applyText(canvas, price.toLocaleString() + currency, 40, 200, "Times New Roman");
+ ctx.fillStyle = `#513d34`
+ ctx.fillText(price.toLocaleString() + currency, 54, 320)
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file
diff --git a/src/module/utils/circle.js b/src/module/utils/circle.js
new file mode 100644
index 0000000..7ba7d8c
--- /dev/null
+++ b/src/module/utils/circle.js
@@ -0,0 +1,19 @@
+const jimp = require("jimp");
+
+module.exports = class Circle {
+ /**
+ * Circle
+ * @param {image} image
+ */
+ async getImage(image) {
+ if (!image) throw new Error(`You must provide an image.`);
+ image = await jimp.read(image);
+ image.resize(480, 480);
+ image.circle();
+ let raw;
+ image.getBuffer(`image/png`, (err, buffer) => {
+ raw = buffer;
+ });
+ return raw;
+ }
+}
\ No newline at end of file
diff --git a/src/module/utils/color.js b/src/module/utils/color.js
new file mode 100644
index 0000000..c250ac0
--- /dev/null
+++ b/src/module/utils/color.js
@@ -0,0 +1,15 @@
+const Canvas = require("canvas");
+
+module.exports = class Color {
+ /**
+ * Color
+ * @param {string} color
+ */
+ async getImage(color = `#FFFFFF`) {
+ const canvas = Canvas.createCanvas(2048, 2048);
+ const ctx = canvas.getContext(`2d`);
+ ctx.fillStyle = color;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ return canvas.toBuffer();
+ }
+}
\ No newline at end of file