const _ = require('lodash'); const Canvas = require('canvas'); const { _drawImage } = require('./imageex'); const logger = require('loglevel'); logger.setLevel(process.env.LOGLEVEL || 'info'); const { createCanvas, Image } = Canvas; const filters = { pride: (canvas, source, x, y, props) => { _.each(canvas.frames, frame => { const basicProps = { width: props.width, height: props.height }; const tmpCanvas = createCanvas(frame.canvas.width, frame.canvas.height); const tmpCtx = tmpCanvas.getContext('2d'); _drawImage(tmpCtx, frame.canvas, x, y, basicProps); const multiplyProps = _.extend({}, props, { attributes: { globalCompositeOperation: 'multiply' } }); logger.debug('multiply props:', multiplyProps); _drawImage(tmpCtx, source.frames[0].canvas, x, y, multiplyProps); const tmpCanvas2 = createCanvas(frame.canvas.width, frame.canvas.height); const tmpCtx2 = tmpCanvas2.getContext('2d'); _drawImage(tmpCtx2, frame.canvas, x, y, basicProps); const sourceInProps = _.extend({}, props, { attributes: { globalCompositeOperation: 'source-in' } }); _drawImage(tmpCtx2, source.frames[0].canvas, x, y, sourceInProps); const combineProps2 = _.extend({}, basicProps, { attributes: { globalCompositeOperation: 'source-atop', globalAlpha: 1 } }); _drawImage(frame.ctx, tmpCanvas2, x, y, combineProps2); const combineProps = _.extend({}, basicProps, { attributes: { globalCompositeOperation: 'source-atop', globalAlpha: 0.6 } }); _drawImage(frame.ctx, tmpCanvas, x, y, combineProps); }); return canvas; } }; module.exports = filters;