pride-buttons/main.js
2025-02-04 19:45:58 +01:00

59 lines
No EOL
2.4 KiB
JavaScript

import data from './data.json' with { type: "json" };
import gm from "gm";
import * as fs from "fs";
const myGm = gm.subClass({imageMagick: true});
const position = {x: 4, y: 2, gravity: "NorthEast"}
const metadatas = []
let count = 0;
const start = Date.now();
data.forEach(prideflag => {
console.log(`== Creating flags for ${prideflag.name.en}`);
const imageMetadata = {title:`Drapeau ${prideflag.name.fr.toLowerCase()} :`, list:[]};
prideflag.texts.forEach(text => {
const outputfile = `${prideflag.name.en.toLowerCase()}-${text.replace("⋅", "_").replace(" ", "_").replace("\n", '-').toLowerCase()}.png`
console.log(`Creating button for text "${text.replace("\n", " ")}" (${outputfile})`);
const data = {file: outputfile, alt:`Drapeau ${prideflag.name.fr.toLowerCase()} avec écrit "${text.replace("\n", " ").toLowerCase()}"`};
imageMetadata.list.push(data);
const turnedText = text
.replace("⋅", "-")
.toUpperCase();
myGm(prideflag.source)
.font('./NFPixels-Regular.ttf', 10)
.drawText(position.x-1, position.y, turnedText, position.gravity)
.drawText(position.x+1, position.y, turnedText, position.gravity)
.drawText(position.x, position.y+1, turnedText, position.gravity)
.drawText(position.x, position.y-1, turnedText, position.gravity)
.drawText(position.x-1, position.y-1, turnedText, position.gravity)
.drawText(position.x+1, position.y+1, turnedText, position.gravity)
.drawText(position.x-1, position.y+1, turnedText, position.gravity)
.drawText(position.x+1, position.y-1, turnedText, position.gravity)
.fill("#FFFFFF")
.drawText(position.x, position.y, turnedText, position.gravity)
.write(`./output/${outputfile}`, function (err) {
if (err) {
console.error(err);
throw err;
};
});
count++;
})
metadatas.push(imageMetadata);
});
const millis = Date.now() - start;
console.log("");
console.log("-----------------------")
console.log(`Generation finished in ${millis / 1000}s`);
console.log(`${count} files generated`);
fs.writeFile("./output/pridebuttons.json", JSON.stringify(metadatas), (err) => {
if (err) {
console.error(err);
throw err;
}
});