From 0b58de7c7a7d58679c2639fa2e37eaaf90712c50 Mon Sep 17 00:00:00 2001 From: Dragon Fire Date: Mon, 23 Mar 2020 12:52:24 -0400 Subject: [PATCH] Automatically determine whether to silhouette in challenger --- commands/meme-gen/challenger.js | 5 +++-- package.json | 2 +- util/Canvas.js | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/commands/meme-gen/challenger.js b/commands/meme-gen/challenger.js index 75872d2a..563d4802 100644 --- a/commands/meme-gen/challenger.js +++ b/commands/meme-gen/challenger.js @@ -2,7 +2,7 @@ const Command = require('../../structures/Command'); const { createCanvas, loadImage } = require('canvas'); const request = require('node-superfetch'); const path = require('path'); -const { silhouette, centerImagePart } = require('../../util/Canvas'); +const { silhouette, hasAlpha, centerImagePart } = require('../../util/Canvas'); module.exports = class ChallengerCommand extends Command { constructor(client) { @@ -36,7 +36,7 @@ module.exports = class ChallengerCommand extends Command { key: 'silhouetted', prompt: 'Should the image be silhouetted?', type: 'boolean', - default: false + default: true }, { key: 'image', @@ -65,6 +65,7 @@ module.exports = class ChallengerCommand extends Command { } silhouetteImage(image) { + if (!hasAlpha(image)) return image; const canvas = createCanvas(image.width, image.height); const ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0); diff --git a/package.json b/package.json index 0eb15917..ab2ebc8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "112.13.2", + "version": "112.13.3", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": { diff --git a/util/Canvas.js b/util/Canvas.js index 4470ca23..03e5366a 100644 --- a/util/Canvas.js +++ b/util/Canvas.js @@ -1,3 +1,5 @@ +const { createCanvas } = require('canvas'); + module.exports = class CanvasUtil { static greyscale(ctx, x, y, width, height) { const data = ctx.getImageData(x, y, width, height); @@ -77,6 +79,20 @@ module.exports = class CanvasUtil { return ctx; } + static hasAlpha(image) { + const canvas = createCanvas(image.width, image.height); + const ctx = canvas.getContext('2d'); + const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; + let hasAlphaPixels = false; + for (let i = 3, n = data.length; i < n; i += 4) { + if (data[i] < 255) { + hasAlphaPixels = true; + break; + } + } + return hasAlphaPixels; + } + static drawImageWithTint(ctx, image, color, x, y, width, height) { const { fillStyle, globalAlpha } = ctx; ctx.fillStyle = color;