starvstheforcesof: async function (msg) { let avatar = await Jimp.read(await getResource(msg.avatar)); avatar.resize(700, 700); let color = colorThief.getColor(avatar); //color = color.map(a => a / 2); let lowest = Math.min(color[0], color[1], color[2]); color = color.map(a => Math.min(a - lowest, 32)); console.debug(color); let bgImg = im(await getBufferFromJimp(avatar)); bgImg.command('convert'); bgImg.out('-matte').out('-virtual-pixel').out('transparent'); bgImg.out('-extent'); bgImg.out('1468x1656'); bgImg.out('-distort'); bgImg.out('Perspective'); bgImg.out("0,0,0,208 700,0,1468,0 0,700,0,1326 700,700,1468,1656"); let jBgImg = await Jimp.read(await getBufferFromIM(bgImg)); jBgImg.resize(734, 828); let foreground = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `starvstheforcesof.png`)); foreground.resize(960, 540); let actions = []; if (color[0] > 0) actions.push({ apply: 'red', params: [color[0]] }); if (color[1] > 0) actions.push({ apply: 'green', params: [color[1]] }); if (color[2] > 0) actions.push({ apply: 'blue', params: [color[2]] }); foreground.color(actions); let img = new Jimp(960, 540); jBgImg.crop(0, 104, 600, 540); img.composite(jBgImg, 430, 0); img.composite(foreground, 0, 0); img.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
delete: async function (msg) { let buf = await createCaption({ text: msg.input, font: 'whitneybold.ttf', size: '512x24', gravity: 'South', fill: '#f8f8f8' }); let originalText = await Jimp.read(buf); let text = new Jimp(originalText.bitmap.width, originalText.bitmap.height + 8); text.composite(originalText, 0, 4); text.autocrop(); let iterations = Math.ceil(text.bitmap.width / 64); console.debug(text.bitmap.width); let delete1 = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'delete1.png')); let delete2 = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'delete2.png')); let delete3 = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'delete3.png')); let cursor = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'cursor.png')); let width = 128 + (iterations * 64); let workspace = new Jimp(width, 84); workspace.composite(delete1, 0, 0); workspace.composite(delete3, width - 64, 0); for (let i = 0; i < iterations; i++) { workspace.composite(delete2, (i + 1) * 64, 0); } workspace.composite(text, 64 + ((iterations * 64 - text.bitmap.width + 32) / 2), 14 + ((48 - text.bitmap.height) / 2)); workspace.composite(cursor, 64 + ((iterations * 64 - cursor.bitmap.width + 32) / 2), 48); //let img = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `SHIT${msg.plural ? 'S' : ''}.png`)); //img.composite(text, 810, 31); workspace.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
cah: async function (msg) { let blackCard = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'blackcard.png')); let whiteCard = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', 'whitecard.png')); let finalImg = new Jimp(183 * (msg.white.length + 1), 254); let blackCaption = await Jimp.read(await createCaption({ font: 'arial.ttf', fill: '#ffffff', text: msg.black, size: '144x190', gravity: 'northwest' })); finalImg.composite(blackCard, 0, 0); finalImg.composite(blackCaption, 19, 19); for (let i = 0; i < msg.white.length; i++) { let whiteCaption = await Jimp.read(await createCaption({ font: 'arial.ttf', fill: 'black', text: msg.white[i], size: '144x190', gravity: 'northwest' })); finalImg.composite(whiteCard, 183 * (i + 1), 0); finalImg.composite(whiteCaption, 183 * (i + 1) + 19, 19); } finalImg.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
art: async function (msg) { let avatar = await Jimp.read(await getResource(msg.avatar)); avatar.resize(370, 370); let foreground = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `art.png`)); let img = new Jimp(1364, 1534); img.composite(avatar, 903, 92); img.composite(avatar, 903, 860); img.composite(foreground, 0, 0); img.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
clint: async function (msg) { let avatar = await Jimp.read(await getResource(msg.avatar)); avatar.resize(700, 700); let bgImg = im(await getBufferFromJimp(avatar)); bgImg.command('convert'); bgImg.out('-matte').out('-virtual-pixel').out('transparent'); bgImg.out('-distort'); bgImg.out('Perspective'); bgImg.out("0,0,0,132 700,0,330,0 0,700,0,530 700,700,330,700"); let jBgImg = await Jimp.read(await getBufferFromIM(bgImg)); let foreground = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `clint.png`)); let img = new Jimp(1200, 675); img.composite(jBgImg, 782, 0); img.composite(foreground, 0, 0); img.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
clyde: async function (msg) { let img = im(864 - 150, 1000).command('convert'); img.font(path.join(__dirname, '..', '..', 'res', 'img', 'fonts', 'whitney.ttf'), 20); img.out('-fill').out('#ffffff'); img.out('-background').out('transparent'); img.out('-gravity').out('west'); img.out(`caption:${msg.text}`); let originalText = await Jimp.read(await getBufferFromIM(img)); let date = new Date(); let text = new Jimp(originalText.bitmap.width + 10, originalText.bitmap.height + 10); text.composite(originalText, 5, 5).autocrop().opacity(0.7); let height = 165 + text.bitmap.height; let canvas = new Jimp(864, height, 0x33363bff); let top = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `clydeTop.png`)); let bottom = await Jimp.read(path.join(__dirname, '..', '..', 'res', 'img', `clydeBottom.png`)); canvas.composite(top, 0, 0); canvas.composite(text, 118, 83); canvas.composite(bottom, 0, height - bottom.bitmap.height); canvas.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },
color: async function (msg) { let img = new Jimp(128, 128, msg.hex); img.getBuffer(Jimp.MIME_PNG, (err, buffer) => { submitBuffer(msg.code, buffer); }); },