Merge new rendering into master #60

Merged
JanGross merged 25 commits from dev-new-rendering into master 2023-08-07 17:34:19 +02:00
2 changed files with 49 additions and 51 deletions
Showing only changes of commit a98f5e0ebc - Show all commits

View File

@@ -71,8 +71,6 @@ module.exports = {
return; return;
} }
let cardImage = await Rendering.renderCard(card); let cardImage = await Rendering.renderCard(card);
//get base filename
let filename = cardImage.split("/").pop();
let description = ""; let description = "";
//Add a new line after every 4th (long) word or after a full stop //Add a new line after every 4th (long) word or after a full stop
@@ -92,7 +90,7 @@ module.exports = {
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setTitle(`${card.Character.name}`) .setTitle(`${card.Character.name}`)
.setDescription(description) .setDescription(description)
.setImage(`attachment://${filename}`) .setImage(cardImage)
.setThumbnail(card.Character.Group.imageURL) .setThumbnail(card.Character.Group.imageURL)
.addFields( .addFields(
{ name: "Owned by", value: `<@${card.User.discordId}>` }, { name: "Owned by", value: `<@${card.User.discordId}>` },
@@ -108,7 +106,7 @@ module.exports = {
embed.setColor(0xff0000); embed.setColor(0xff0000);
embed.addFields({ name: "Burned", value: "This card has been burned" }); embed.addFields({ name: "Burned", value: "This card has been burned" });
} }
const message = await interaction.editReply({ embeds: [embed], files: [cardImage], fetchReply: true }); const message = await interaction.editReply({ embeds: [embed], fetchReply: true });
}, },
/** /**

View File

@@ -2,6 +2,7 @@ const sharp = require('sharp');
const crypto = require('crypto'); const crypto = require('crypto');
const fs = require('fs'); const fs = require('fs');
const { Character } = require('../models'); const { Character } = require('../models');
const axios = require('axios').default
const QualityColors = { const QualityColors = {
1: {r: 0, g: 0, b: 0}, //bad 1: {r: 0, g: 0, b: 0}, //bad
@@ -53,61 +54,60 @@ module.exports = {
} }
}); });
if (!card.userId) { /* if (!card.userId) {
return './assets/cards/card_cover.png'; return './assets/cards/card_cover.png';
} } */
/**
let hash = crypto.createHash('md5').update(character.imageIdentifier + card.quality + (card.userId == 1 ? 'unclaimed' : 'claimed')).digest('hex'); let hash = crypto.createHash('md5').update(character.imageIdentifier + card.quality + (card.userId == 1 ? 'unclaimed' : 'claimed')).digest('hex');
//TODO: Add switch to turn off or bypass caching //TODO: Add switch to turn off or bypass caching
if (fs.existsSync(`./assets/image_cache/${hash}.gif`)) { if (fs.existsSync(`./assets/image_cache/${hash}.gif`)) {
return `./assets/image_cache/${hash}.gif`; return `./assets/image_cache/${hash}.gif`;
} }
**/
console.log(`Rendering card or character ${character.name} ${character.imageIdentifier}`);
console.log(`Rendering card ${hash} for character ${character.name} ${character.imageIdentifier}`); let characterImage = `http://vps5.minzkraut.com:6789/cards/${character.imageIdentifier}`;
console.log("Character iomage ", characterImage);
let filetype = character.imageIdentifier.split('.').pop(); let job = {
let isAnimated = ['gif', 'webp'].includes(filetype); "type": "card",
"size": {
let border = await sharp(`./assets/overlays/border.svg`).tint(QualityColors[card.quality]).toBuffer(); "width": 600,
//BUGBUG: Custom fonts not loading "height": 1000
let label = Buffer.from(` },
<svg width="300" height="500"> "elements": [
<text x="50%" y="95%" text-anchor="middle" style="font-size:28px;">${character.name}</text> {
</svg> "type": "image",
`); "asset": `${characterImage}`,
"x": 0,
let cardImage; "y": 300,
try { "width": 600,
console.log("Loading character image"); "height": 1000
cardImage = await sharp(`./assets/cards/${character.imageIdentifier}`, },
{ animated: isAnimated, pages: (isAnimated ? -1 : 1) }); {
await cardImage.toBuffer(); "type": "text",
} catch (error) { "text": `${character.name}`,
console.log(`Missing character image: ${character.imageIdentifier}`); "fontSize": 55,
cardImage = await sharp(`./assets/cards/missing_image.png`); "x": 0,
} "y": 700,
console.log("rendering"); "width": 600,
await cardImage.resize(300, 500); "height": 300,
await cardImage.composite([ "horizontalAlignment": "center"
{input: border, top:0, left: 0, tile: true}, },
{input: label, top:0, left: 0, tile: true}]); {
//BUGBUG: Grayscale does not apply to card border "type": "image",
if (card.userId === 1) { "asset": "https://cdn.discordapp.com/attachments/1083687175998152714/1113486254953222205/rainbow_overlay.png",
await cardImage.grayscale() "x": 0,
.modulate({ "y": 300,
brightness: 0.5 "width": 600,
}); "height": 1000
}
]
} }
if (isAnimated) { console.log("Fetching ", );
await cardImage.gif({effort: 1}) let { data } = await axios.post('https://jose.toho.mnz.gg/jobs', job);
} else { console.log("Fetched ", data);
await cardImage.png(); return data["path"];
}
let extension = isAnimated ? 'gif' : 'png';
await cardImage.toFile(`./assets/image_cache/${hash}.${extension}`);
return `./assets/image_cache/${hash}.${extension}`;
} }
} }