diff --git a/README.md b/README.md index 68bf7417..b636d96d 100644 --- a/README.md +++ b/README.md @@ -620,8 +620,7 @@ The final frames are then converted back to a GIF but in the process, the time d Modules that do not work: 1. ColorBar (Will get fixed upon fixing overlay as this is a meta module which uses overlay) 2. FisheyeGL -4. Overlay -5. Text Overlay (Almost fixed) -6. Blend -7. Histogram -8. WebGL Distort +3. Overlay +4. Blend +5. Histogram +6. WebGL Distort \ No newline at end of file diff --git a/examples/demo.css b/examples/demo.css index 2cb808e2..6b941aa3 100644 --- a/examples/demo.css +++ b/examples/demo.css @@ -44,7 +44,6 @@ body > .container-fluid { .panel { margin-left: 20px; margin-right: 20px; - min-width:400px; } .mouse { @@ -66,7 +65,6 @@ body > .container-fluid { border-radius: 8px; text-align: center; color: #444; - min-width:300px; } .dropzone input { @@ -156,6 +154,13 @@ body > .container-fluid { margin: 0px 0px 0px 10px; width: 250px; } + +@media(max-width: 768px) { + #dropzone { + margin: 0 0% 30px; + } +} + #dwnld { max-width: 500px; margin: 20px auto; diff --git a/examples/demo.js b/examples/demo.js index 95854e38..2e9630aa 100644 --- a/examples/demo.js +++ b/examples/demo.js @@ -340,6 +340,7 @@ window.onload = function () { else step.imgElement.src = url; insertPreview.updatePreviews(url, document.querySelector('#addStep')); + DefaultHtmlStepUi(sequencer).updateDimensions(step); } }); diff --git a/examples/index.html b/examples/index.html index 0767cfd8..9a3d26f3 100644 --- a/examples/index.html +++ b/examples/index.html @@ -60,7 +60,7 @@
A pure JavaScript sequential image processing system, inspired by storyboards. Instead of modifying the original diff --git a/package-lock.json b/package-lock.json index 0d754947..4be65402 100644 --- a/package-lock.json +++ b/package-lock.json @@ -687,14 +687,14 @@ "dev": true }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/plugin-transform-parameters": "^7.12.1" } }, "@babel/plugin-syntax-async-generators": { @@ -805,47 +805,12 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - } } }, "@babel/runtime-corejs3": { @@ -12554,9 +12519,9 @@ } }, "jsqr": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.2.0.tgz", - "integrity": "sha512-wKcQS9QC2VHGk7aphWCp1RrFyC0CM6fMgC5prZZ2KV/Lk6OKNoCod9IR6bao+yx3KPY0gZFC5dc+h+KFzCI0Wg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.3.1.tgz", + "integrity": "sha512-zCTP6Qd/WwjrpuHFkJuXc5opRdKprUr7eI7+JCCtcetThJt45qptu82MWQ+eET+FtDrMo7+BYjo3iD0XIq1L9Q==" }, "junk": { "version": "3.1.0", @@ -12997,9 +12962,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "lodash.debounce": { "version": "4.0.8", diff --git a/src/modules/Colorbar/Module.js b/src/modules/Colorbar/Module.js index 3765b03e..ffb3fdf6 100644 --- a/src/modules/Colorbar/Module.js +++ b/src/modules/Colorbar/Module.js @@ -6,7 +6,7 @@ module.exports = require('../../util/createMetaModule.js')( { 'name': 'gradient', 'options': {} }, { 'name': 'colormap', 'options': { colormap: options.colormap || defaults.colormap } }, { 'name': 'crop', 'options': { 'y': 0, 'w': '100%', 'h': options.h || defaults.h } }, - { 'name': 'overlay', 'options': { 'x': options.x || defaults.h, 'y': options.y || defaults.y, 'offset': -4 } } + { 'name': 'overlay', 'options': { 'x': options.x || defaults.x, 'y': options.y || defaults.y, 'offset': -4 } } ]; }, { infoJson: require('./info.json') diff --git a/src/modules/Crop/Module.js b/src/modules/Crop/Module.js index e03c54a5..4e16ae93 100644 --- a/src/modules/Crop/Module.js +++ b/src/modules/Crop/Module.js @@ -29,11 +29,13 @@ module.exports = function CropModule(options, UI) { options.step.input = input.src; + // We should do this via event/listener: + if (ui && ui.hide) ui.hide(); + + function extraManipulation(pixels) { const newPixels = require('./Crop')(pixels, options, function() { - // We should do this via event/listener: - if (ui && ui.hide) ui.hide(); - + // Start custom UI setup (draggable UI) // Only once we have an input image if (setupComplete === false && options.step.inBrowser && !options.noUI) { diff --git a/src/modules/EdgeDetect/EdgeUtils.js b/src/modules/EdgeDetect/EdgeUtils.js index 872f618a..10b617dd 100644 --- a/src/modules/EdgeDetect/EdgeUtils.js +++ b/src/modules/EdgeDetect/EdgeUtils.js @@ -13,10 +13,10 @@ const kernelx = [ [ 0, 0, 0], [ 1, 2, 1] ]; - + module.exports = function(pixels, highThresholdRatio, lowThresholdRatio, useHysteresis) { let angles = [], grads = [], strongEdgePixels = [], weakEdgePixels = [], pixelsToBeSupressed = []; - + for (var x = 0; x < pixels.shape[0]; x++) { grads.push([]); angles.push([]); @@ -110,10 +110,13 @@ function sobelFilter(pixels, x, y) { * @returns {Number} Category number of the given angle */ function categorizeAngle(angle){ - if ((angle >= -22.5 && angle <= 22.5) || (angle < -157.5 && angle >= -180)) return 1; - else if ((angle >= 22.5 && angle <= 67.5) || (angle < -112.5 && angle >= -157.5)) return 2; - else if ((angle >= 67.5 && angle <= 112.5) || (angle < -67.5 && angle >= -112.5)) return 3; - else if ((angle >= 112.5 && angle <= 157.5) || (angle < -22.5 && angle >= -67.5)) return 4; + const pi = Math.PI; + angle = angle > 0 ? angle : pi - Math.abs(angle); // Diagonally flip the angle if it is negative (since edge remains the same) + + if (angle <= pi / 8 || angle > 7 * pi / 8) return 1; + else if (angle > pi / 8 && angle <= 3 * pi / 8) return 2; + else if (angle > 3 * pi / 8 && angle <= 5 * pi / 8) return 3; + else if (angle > 5 * pi / 8 && angle <= 7 * pi / 8) return 4; /* Category Map * 1 => E-W @@ -143,8 +146,6 @@ const removeElem = (arr = [], elem) => { // Removes the specified element from t // Non Maximum Supression without interpolation. function nonMaxSupress(pixels, grads, angles, pixelsToBeSupressed) { - angles = angles.map((arr) => arr.map(convertToDegrees)); - for (let x = 0; x < pixels.shape[0]; x++) { for (let y = 0; y < pixels.shape[1]; y++) { @@ -157,7 +158,7 @@ function nonMaxSupress(pixels, grads, angles, pixelsToBeSupressed) { pixelsToBeSupressed.push([x, y]); } break; - + case 2: if (!((grads[x][y] >= grads[x + 1][y + 1]) && (grads[x][y] >= grads[x - 1][y - 1]))){ pixelsToBeSupressed.push([x, y]); @@ -181,15 +182,6 @@ function nonMaxSupress(pixels, grads, angles, pixelsToBeSupressed) { } } - -/** - * @method convertToDegrees - * @description Converts the given angle(in radians) to degrees. - * @param {Number} radians Angle in radians - * @returns {Number} Angle in degrees - */ -var convertToDegrees = radians => (radians * 180) / Math.PI; - // Finds the max value in a 2d array like grads. var findMaxInMatrix = arr => Math.max(...arr.map(el => el.map(val => val ? val : 0)).map(el => Math.max(...el))); diff --git a/src/modules/Resize/Module.js b/src/modules/Resize/Module.js index b097ae0f..a0caeda1 100644 --- a/src/modules/Resize/Module.js +++ b/src/modules/Resize/Module.js @@ -1,6 +1,3 @@ -const imagejs = require('imagejs'), - pixelSetter = require('../../util/pixelSetter'), - ndarray = require('ndarray'); /* * Resize the image by given percentage value */ @@ -19,44 +16,7 @@ module.exports = function Resize(options, UI) { const step = this; function extraManipulation(pixels) { - // Value above 100% scales up, and below 100% scales down - const resize_value = parseInt(options.resize.slice(0, -1)); - - if (resize_value == 100) return pixels; - - - const new_width = Math.round(pixels.shape[0] * (resize_value / 100)), - new_height = Math.round(pixels.shape[1] * (resize_value / 100)); - - const bitmap = new imagejs.Bitmap({ width: pixels.shape[0], height: pixels.shape[1] }); - - for (let x = 0; x < pixels.shape[0]; x++) { - for (let y = 0; y < pixels.shape[1]; y++) { - let r = pixels.get(x, y, 0), - g = pixels.get(x, y, 1), - b = pixels.get(x, y, 2), - a = pixels.get(x, y, 3); - - bitmap.setPixel(x, y, r, g, b, a); - } - } - - const resized = bitmap.resize({ - width: new_width, - height: new_height, - algorithm: 'bicubicInterpolation' - }); - - const newPix = new ndarray([], [new_width, new_height, 4]); - - for (let x = 0; x < new_width; x++) { - for (let y = 0; y < new_height; y++) { - const {r, g, b, a} = resized.getPixel(x, y); - pixelSetter(x, y, [r, g, b, a], newPix); - } - } - - return newPix; + return require('./Resize')(pixels, options); } function output(image, datauri, mimetype, wasmSuccess) { diff --git a/src/modules/Resize/Resize.js b/src/modules/Resize/Resize.js new file mode 100644 index 00000000..142412ec --- /dev/null +++ b/src/modules/Resize/Resize.js @@ -0,0 +1,44 @@ +const imagejs = require('imagejs'), + pixelSetter = require('../../util/pixelSetter'), + ndarray = require('ndarray'); +module.exports = function Resize(pixels, options) { + const resize_value = parseInt(options.resize.slice(0, -1)); + + if (resize_value == 100) return pixels; + + const new_width = Math.round(pixels.shape[0] * (resize_value / 100)), + new_height = Math.round(pixels.shape[1] * (resize_value / 100)); + + const bitmap = new imagejs.Bitmap({ + width: pixels.shape[0], + height: pixels.shape[1] + }); + + for (let x = 0; x < pixels.shape[0]; x++) { + for (let y = 0; y < pixels.shape[1]; y++) { + let r = pixels.get(x, y, 0), + g = pixels.get(x, y, 1), + b = pixels.get(x, y, 2), + a = pixels.get(x, y, 3); + + bitmap.setPixel(x, y, r, g, b, a); + } + } + + const resized = bitmap.resize({ + width: new_width, + height: new_height, + algorithm: 'bicubicInterpolation' + }); + + const newPix = new ndarray([], [new_width, new_height, 4]); + + for (let x = 0; x < new_width; x++) { + for (let y = 0; y < new_height; y++) { + const { r, g, b, a } = resized.getPixel(x, y); + pixelSetter(x, y, [r, g, b, a], newPix); + } + } + + return newPix; +}; diff --git a/test/core/gifs/edge-detect.js b/test/core/gifs/edge-detect.js index 8688a67a..97421f25 100644 --- a/test/core/gifs/edge-detect.js +++ b/test/core/gifs/edge-detect.js @@ -1,5 +1,5 @@ const testModule = require('../templates/gif-module-test.js'), gif = require('../images/test.gif.js'), - benchmark = 'data:image/gif;base64,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'; + benchmark = 'data:image/gif;base64,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'; -testModule('edge-detect', {}, benchmark, gif, 'gif'); \ No newline at end of file +testModule('edge-detect', {}, benchmark, gif, 'gif'); diff --git a/test/core/modules/edge-detect.js b/test/core/modules/edge-detect.js index 548e95ca..e689995b 100644 --- a/test/core/modules/edge-detect.js +++ b/test/core/modules/edge-detect.js @@ -1,5 +1,5 @@ const testModule = require('../templates/module-test'), - benchmark = 'data:image/png;base64,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', + benchmark = 'data:image/png;base64,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', image = require('../images/IS-QR'), options = { blur: 1.8, @@ -7,4 +7,4 @@ const testModule = require('../templates/module-test'), lowThresholdRatio: 0.16 }; -testModule('edge-detect', options, benchmark, image); \ No newline at end of file +testModule('edge-detect', options, benchmark, image); diff --git a/yarn.lock b/yarn.lock index 8581d8e7..fc354f8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -151,13 +151,13 @@ integrity sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg== "@babel/plugin-proposal-object-rest-spread@^7.4.3": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.12.1" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -236,12 +236,11 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-parameters@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" "@babel/runtime-corejs3@^7.8.3": @@ -6498,9 +6497,9 @@ jsprim@^1.2.2: verror "1.10.0" jsqr@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.2.0.tgz#f93fc65fa7d1ded78b1bcb020fa044352b04261a" - integrity sha512-wKcQS9QC2VHGk7aphWCp1RrFyC0CM6fMgC5prZZ2KV/Lk6OKNoCod9IR6bao+yx3KPY0gZFC5dc+h+KFzCI0Wg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.3.1.tgz#515a766e58b00c80142f3a2dc4b8751100ceedcf" + integrity sha512-zCTP6Qd/WwjrpuHFkJuXc5opRdKprUr7eI7+JCCtcetThJt45qptu82MWQ+eET+FtDrMo7+BYjo3iD0XIq1L9Q== junk@^3.1.0: version "3.1.0"