'use strict'; import Jimp from 'jimp'; interface RGBA { r : number; g : number; b : number; a : number; } export default class Frame { static async info (imagePath : string) { let image : any; try { image = await Jimp.read(imagePath); } catch (err) { throw err; } return { width : image.bitmap.width, height : image.bitmap.height }; } static async solidColor (width : number, height : number, color : RGBA) { //@ts-ignore const colorInt : string = Jimp.rgbaToInt(color.r, color.g, color.b, color.a); return new Promise((resolve : Function, reject : Function) => { return new Jimp(width, height, colorInt, (err, image) => { if (err) { return reject(err) } return resolve(image); }); }); } static async blend (inPath : any, color : RGBA, imagePath : string) { //cmd2 = `${this.convert} "${tmpoutput}" -resize ${w}x${h} -size ${w}x${h} xc:"rgb(${rgb[0]},${rgb[1]},${rgb[2]})" +swap -compose Darken -composite "${tmpoutput}"`; const options : any = { mode: Jimp.BLEND_DARKEN, opacitySource: 1.0, opacityDest: 1.0 }; let width : number; let height : number; let bottom : any; let top : any; try { top = await Jimp.read(inPath); } catch (err) { throw err; } width = top.bitmap.width; height = top.bitmap.height; try { bottom = await Frame.solidColor(width, height, color); } catch (err) { throw err; } bottom.composite(top, 0, 0, options); try { await bottom.writeAsync(imagePath); } catch (err) { throw err; } return imagePath; } } module.exports = Frame