publiclab/image-sequencer

View on GitHub
src/modules/Resize/Resize.js

Summary

Maintainability
C
1 day
Test Coverage
const imagejs = require('imagejs'),
  pixelSetter = require('../../util/pixelSetter'),
  ndarray = require('ndarray');
module.exports = function Resize(pixels, options) {
  const resize_value = parseFloat(options.resize);

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