UNPKG

image-js

Version:

Image processing and manipulation in JavaScript

38 lines (36 loc) 1.23 kB
import isInteger from 'is-integer'; export function validateKernel(kernel) { let kHeight, kWidth; if (Array.isArray(kernel)) { if (Array.isArray(kernel[0])) { // 2D array if ((kernel.length & 1) === 0 || (kernel[0].length & 1) === 0) { throw new RangeError( 'validateKernel: Kernel rows and columns should be odd numbers', ); } else { kHeight = Math.floor(kernel.length / 2); kWidth = Math.floor(kernel[0].length / 2); } } else { let kernelWidth = Math.sqrt(kernel.length); if (isInteger(kernelWidth)) { kWidth = kHeight = Math.floor(Math.sqrt(kernel.length) / 2); } else { throw new RangeError('validateKernel: Kernel array should be a square'); } // we convert the array to a matrix let newKernel = new Array(kernelWidth); for (let i = 0; i < kernelWidth; i++) { newKernel[i] = new Array(kernelWidth); for (let j = 0; j < kernelWidth; j++) { newKernel[i][j] = kernel[i * kernelWidth + j]; } } kernel = newKernel; } } else { throw new Error(`validateKernel: Invalid Kernel: ${kernel}`); } return { kernel, kWidth, kHeight }; }