From eab42cbfd2facb89d45e5b6c19994809d883e6d2 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Fri, 14 Sep 2018 01:24:14 +0000 Subject: [PATCH] Silhouette challenger support, adjust demotivational dimensions --- assets/images/demotivational-poster.png | Bin 9982 -> 0 bytes commands/avatar-edit/challenger.js | 19 +++++++++++++++++-- commands/image-edit/demotivational-poster.js | 17 ++++++++++++----- package.json | 2 +- 4 files changed, 30 insertions(+), 8 deletions(-) delete mode 100644 assets/images/demotivational-poster.png diff --git a/assets/images/demotivational-poster.png b/assets/images/demotivational-poster.png deleted file mode 100644 index 22a360de07dcfd93633d30cf41888df653423dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9982 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 msg.author + }, + { + key: 'silhouetted', + prompt: 'Should the image be silhouetted?', + type: 'boolean', + default: false } ] }); } - async run(msg, { user }) { + async run(msg, { user, silhouetted }) { const avatarURL = user.displayAvatarURL({ format: 'png', size: 256 }); try { const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png')); @@ -36,10 +43,18 @@ module.exports = class ChallengerCommand extends Command { const canvas = createCanvas(base.width, base.height); const ctx = canvas.getContext('2d'); ctx.drawImage(base, 0, 0); - ctx.drawImage(avatar, 484, 98, 256, 256); + ctx.drawImage(silhouetted ? this.silhouetteImage(avatar) : avatar, 484, 98, 256, 256); return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] }); } catch (err) { return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } } + + silhouetteImage(image) { + const canvas = createCanvas(image.width, image.height); + const ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0); + silhouette(ctx, 0, 0, image.width, image.height); + return canvas; + } }; diff --git a/commands/image-edit/demotivational-poster.js b/commands/image-edit/demotivational-poster.js index bcc5ecb1..80c2c96e 100644 --- a/commands/image-edit/demotivational-poster.js +++ b/commands/image-edit/demotivational-poster.js @@ -44,15 +44,22 @@ module.exports = class DemotivationalPosterCommand extends Command { async run(msg, { title, text, image }) { try { - const base = await loadImage(path.join(__dirname, '..', '..', 'assets', 'images', 'demotivational-poster.png')); const { body } = await request.get(image); const data = await loadImage(body); - const canvas = createCanvas(base.width, base.height); + const canvas = createCanvas(750, 600); const ctx = canvas.getContext('2d'); + ctx.fillStyle = 'black'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + const ratio = data.width / data.height; + const width = Math.min(Math.round(402 / ratio), 602); + const x = (data.width / 2) - (width / 2); ctx.fillStyle = 'white'; - ctx.fillRect(0, 0, base.width, base.height); - ctx.drawImage(data, 69, 44, 612, 412); - ctx.drawImage(base, 0, 0); + ctx.fillRect(x - 4, 40, width + 4, 406); + ctx.fillStyle = 'black'; + ctx.fillRect(x - 2, 42, width + 2, 404); + ctx.fillStyle = 'white'; + ctx.fillRect(x, 44, width, 402); + ctx.drawImage(data, x, 44, width, 402); ctx.textAlign = 'center'; ctx.font = '60px Noto'; ctx.fillStyle = 'aquamarine'; diff --git a/package.json b/package.json index 21f72adc..e42567a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "91.2.0", + "version": "91.2.1", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {