mirror of
https://github.com/publiclab/image-sequencer.git
synced 2025-12-21 15:50:14 +01:00
* wasmSuccess * modules use wasmSuccess * modules use wasmSuccess * add the tooltip * add GIF support * fix imageDImensions function * fix inputCoordinatesParser function * show correct image dimensions * show correct image dimensions * don't allow save as PDF for GIFs * fix QR module * fix BlobAnalysis * fix Blur * fix Colorbar * fix Crop * fix crop defaults * fix DrawRectangle * fix EdgeDetect * fix FlipImage * fix Gradient * fix Invert * fix Overlay * fix Resize * fix Rotate * fix TextOverlay * fix parse input test * make GIFs work in nodejs * sample GIF test * small change * cleanup * cleanup * cleanup * small fix * small change * handle errors * proper error handling and fix tests * cleanup * try a fix * try another fix * fix module benchmarks * try more fixes * revert * try fixing the tests * fix overlay test * add the gif tests * remove unnecessary changes * fix tests * whoops * add some docs * inBrowser * fix all module tests Co-authored-by: Jeffrey Warren <jeff@unterbahn.com>
72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
const ndarray = require('ndarray'),
|
|
pixelSetter = require('../../util/pixelSetter'),
|
|
parseCornerCoordinateInputs = require('../../util/ParseInputCoordinates');
|
|
|
|
module.exports = function Crop(pixels, options, cb) {
|
|
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
|
|
options.x = options.x || defaults.x;
|
|
options.y = options.y || defaults.y;
|
|
|
|
options.w = options.w || defaults.w;
|
|
options.h = options.h || defaults.h;
|
|
|
|
options.backgroundColor = options.backgroundColor || defaults.backgroundColor;
|
|
|
|
const bg = options.backgroundColor.replace('rgba', '').replace('(', '').replace(')', '').split(',');
|
|
|
|
let iw = pixels.shape[0], // Width of Original Image
|
|
ih = pixels.shape[1], // Height of Original Image
|
|
offsetX,
|
|
offsetY,
|
|
w,
|
|
h;
|
|
|
|
// Parse the inputs
|
|
parseCornerCoordinateInputs({iw, ih},
|
|
{
|
|
x: { valInp: options.x, type: 'horizontal' },
|
|
y: { valInp: options.y, type: 'vertical' },
|
|
w: { valInp: options.w, type: 'horizontal' },
|
|
h: { valInp: options.h, type: 'vertical' },
|
|
}, function (opt, coord) {
|
|
offsetX = Math.floor(coord.x.valInp);
|
|
offsetY = Math.floor(coord.y.valInp);
|
|
w = Math.floor(coord.w.valInp);
|
|
h = Math.floor(coord.h.valInp);
|
|
});
|
|
|
|
const newPixels = new ndarray([], [w, h, 4]);
|
|
|
|
for (let x = 0; x < w; x++) {
|
|
for (let y = 0; y < h; y++) {
|
|
pixelSetter(x, y, bg, newPixels); // Set the background color
|
|
}
|
|
}
|
|
|
|
for (
|
|
let x = 0;
|
|
x < Math.min(w - 1, offsetX + iw - 1);
|
|
x++
|
|
) {
|
|
for (
|
|
let y = 0;
|
|
y < Math.min(h - 1, offsetY + ih - 1);
|
|
y++
|
|
) {
|
|
const inputImgX = x + offsetX,
|
|
inputImgY = y + offsetY;
|
|
|
|
pixelSetter(x, y, [
|
|
pixels.get(inputImgX, inputImgY, 0),
|
|
pixels.get(inputImgX, inputImgY, 1),
|
|
pixels.get(inputImgX, inputImgY, 2),
|
|
pixels.get(inputImgX, inputImgY, 3)
|
|
], newPixels); // Set the background color
|
|
}
|
|
}
|
|
|
|
if (cb) cb();
|
|
|
|
return newPixels;
|
|
};
|