UNPKG

image-js

Version:

Image processing and manipulation in JavaScript

47 lines 1.97 kB
import { Image } from '../Image.js'; /** * Rotates an image in multiples of 90 degrees. * @param image - The image to rotate. * @param angle - The angle to rotate the image by. Positive values rotate clockwise, negative values rotate counter-clockwise. * @returns - The rotated image. */ export function rotate(image, angle) { const newWidth = angle % 180 === 0 ? image.width : image.height; const newHeight = angle % 180 === 0 ? image.height : image.width; const newImage = Image.createFrom(image, { width: newWidth, height: newHeight, }); if (angle === 90 || angle === -270) { for (let column = 0; column < image.width; column++) { for (let row = 0; row < image.height; row++) { for (let channel = 0; channel < image.channels; channel++) { newImage.setValue(newImage.width - row - 1, column, channel, image.getValue(column, row, channel)); } } } } else if (angle === 180 || angle === -180) { for (let column = 0; column < image.width; column++) { for (let row = 0; row < image.height; row++) { for (let channel = 0; channel < image.channels; channel++) { newImage.setValue(newImage.width - column - 1, newImage.height - row - 1, channel, image.getValue(column, row, channel)); } } } } else if (angle === 270 || angle === -90) { for (let column = 0; column < image.width; column++) { for (let row = 0; row < image.height; row++) { for (let channel = 0; channel < image.channels; channel++) { newImage.setValue(row, newImage.height - column - 1, channel, image.getValue(column, row, channel)); } } } } else { throw new RangeError(`invalid angle: ${angle}`); } return newImage; } //# sourceMappingURL=rotate.js.map