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; +};