From 60cfcb4d3067ecfd7b801eaf2720cf75c93ee454 Mon Sep 17 00:00:00 2001 From: aashna27 Date: Tue, 26 Mar 2019 01:28:02 +0530 Subject: [PATCH] Added Text Overlay module (#917) --- src/Modules.js | 1 + src/modules/TextOverlay/Module.js | 51 +++++++++++++++++++++++++ src/modules/TextOverlay/TextOverlay.js | 25 ++++++++++++ src/modules/TextOverlay/index.js | 4 ++ src/modules/TextOverlay/info.json | 53 ++++++++++++++++++++++++++ 5 files changed, 134 insertions(+) create mode 100644 src/modules/TextOverlay/Module.js create mode 100644 src/modules/TextOverlay/TextOverlay.js create mode 100644 src/modules/TextOverlay/index.js create mode 100644 src/modules/TextOverlay/info.json diff --git a/src/Modules.js b/src/Modules.js index 8c326b43..66b9ba14 100644 --- a/src/Modules.js +++ b/src/Modules.js @@ -34,6 +34,7 @@ module.exports = { 'resize': require('./modules/Resize'), 'rotate': require('./modules/Rotate'), 'saturation': require('./modules/Saturation'), + 'text-overlay': require('./modules/TextOverlay'), 'threshold': require('./modules/Threshold'), 'tint': require('./modules/Tint'), 'color-temperature': require('./modules/ColorTemperature') diff --git a/src/modules/TextOverlay/Module.js b/src/modules/TextOverlay/Module.js new file mode 100644 index 00000000..8570958b --- /dev/null +++ b/src/modules/TextOverlay/Module.js @@ -0,0 +1,51 @@ + +module.exports = function TextOverlay(options,UI) { + + var output; + + function draw(input, callback, progressObj) { + + progressObj.stop(true); + progressObj.overrideFlag = true; + + var step = this; + if (!options.step.inBrowser) { // This module is only for browser + this.output = input; + callback(); + } + else{ + var priorStep = this.getStep(-1); // get the previous step to add text onto it. + + function extraManipulation(pixels) { + //if (options.step.inBrowser) + pixels = require('./TextOverlay')(pixels, options,priorStep); + return pixels + } + + function output(image, datauri, mimetype) { + + // This output is accesible by Image Sequencer + step.output = { src: datauri, format: mimetype }; + + } + + return require('../_nomodule/PixelManipulation.js')(input, { + output: output, + extraManipulation: extraManipulation, + format: input.format, + image: options.image, + inBrowser: options.inBrowser, + callback: callback + }); + + } + } + + return { + options: options, + draw: draw, + output: output, + UI: UI + } + } + \ No newline at end of file diff --git a/src/modules/TextOverlay/TextOverlay.js b/src/modules/TextOverlay/TextOverlay.js new file mode 100644 index 00000000..be730bab --- /dev/null +++ b/src/modules/TextOverlay/TextOverlay.js @@ -0,0 +1,25 @@ +module.exports = exports = function(pixels, options,priorstep){ + var defaults = require('./../../util/getDefaults.js')(require('./info.json')); + + options.text = options.text || defaults.text; + options.x = options.x || defaults.x; + options.y = options.y || defaults.y; + options.font = options.font || defaults.font; + options.color = options.color || defaults.color; + options.size = options.size || defaults.size; + + + var img = $(priorstep.imgElement); + var canvas = document.createElement("canvas"); + canvas.width = pixels.shape[0]; //img.width(); + canvas.height = pixels.shape[1]; //img.height(); + var ctx = canvas.getContext('2d'); + ctx.drawImage(img[0], 0, 0); + ctx.fillStyle = options.color; + ctx.font = options.size +"px " + options.font; + ctx.fillText(options.text, options.x, options.y); + + var myImageData = ctx.getImageData(0,0,canvas.width,canvas.height); + pixels.data = myImageData.data + return pixels; +} \ No newline at end of file diff --git a/src/modules/TextOverlay/index.js b/src/modules/TextOverlay/index.js new file mode 100644 index 00000000..11ef888f --- /dev/null +++ b/src/modules/TextOverlay/index.js @@ -0,0 +1,4 @@ +module.exports = [ + require('./Module'), + require('./info.json') +] \ No newline at end of file diff --git a/src/modules/TextOverlay/info.json b/src/modules/TextOverlay/info.json new file mode 100644 index 00000000..db759c87 --- /dev/null +++ b/src/modules/TextOverlay/info.json @@ -0,0 +1,53 @@ +{ + "name": "Text-Overlay", + "description": "Overlay text on image.", + "inputs": { + "text": { + "type": "string", + "desc": "Enter the text to overlay.", + "default": "Lorem ipsum" + }, + "x": { + "type": "integer", + "desc": "Starting text horizontal position.", + "default": "20" + }, + "y": { + "type": "integer", + "desc": "Starting text vertical position.", + "default": "20" + }, + "font": { + "type": "select", + "desc": "Select the font style.", + "default": "serif", + "values": [ + "serif", + "arial", + "times", + "courier", + "Montserrat" + ] + }, + "color": { + "type": "select", + "desc": "Select the text color.", + "default": "black", + "values": [ + "black", + "blue", + "green", + "red", + "white", + "pink", + "orange" + ] + }, + "size": { + "type" : "integer", + "desc": "Enter the font size in pixels.", + "default": "12" + } + }, + "only": "browser" +}