Automatically determine whether to silhouette in challenger

This commit is contained in:
Dragon Fire
2020-03-23 12:52:24 -04:00
parent 8e6d2d2d8d
commit 0b58de7c7a
3 changed files with 20 additions and 3 deletions
+3 -2
View File
@@ -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);
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "xiao",
"version": "112.13.2",
"version": "112.13.3",
"description": "Your personal server companion.",
"main": "Xiao.js",
"scripts": {
+16
View File
@@ -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;