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; } });