Improve preprocess parameter type

This commit is contained in:
ergunsh
2021-09-03 11:53:52 +03:00
parent 00cfdafdf3
commit 27f103fee5
2 changed files with 29 additions and 14 deletions

View File

@@ -29,14 +29,23 @@ interface ResizeWithAspectParams {
target_height: number;
}
interface ResizeInstantiateOptions {
export interface ResizeOptions {
width: number;
height: number;
method: string;
method: 'triange' | 'catrom' | 'mitchell' | 'lanczos3';
premultiply: boolean;
linearRGB: boolean;
}
export interface QuantOptions {
numColors: number;
dither: number;
}
export interface RotateOptions {
numRotations: number;
}
declare global {
// Needed for being able to use ImageData as type in codec types
type ImageData = import('./image_data.js').default;
@@ -171,13 +180,7 @@ export const preprocessors = {
buffer: Uint8Array,
input_width: number,
input_height: number,
{
width,
height,
method,
premultiply,
linearRGB,
}: ResizeInstantiateOptions,
{ width, height, method, premultiply, linearRGB }: ResizeOptions,
) => {
({ width, height } = resizeWithAspect({
input_width,
@@ -218,7 +221,7 @@ export const preprocessors = {
buffer: Uint8Array,
width: number,
height: number,
{ numColors, dither }: { numColors: number; dither: number },
{ numColors, dither }: QuantOptions,
) =>
new ImageData(
imageQuant.quantize(buffer, width, height, numColors, dither),
@@ -239,7 +242,7 @@ export const preprocessors = {
buffer: Uint8Array,
width: number,
height: number,
{ numRotations }: { numRotations: number },
{ numRotations }: RotateOptions,
) => {
const degrees = (numRotations * 90) % 360;
const sameDimensions = degrees == 0 || degrees == 180;

View File

@@ -2,7 +2,13 @@ import { isMainThread } from 'worker_threads';
import { cpus } from 'os';
import { promises as fsp } from 'fs';
import { codecs as encoders, preprocessors } from './codecs.js';
import {
codecs as encoders,
preprocessors,
QuantOptions,
ResizeOptions,
RotateOptions,
} from './codecs.js';
import WorkerPool from './worker_pool.js';
import { autoOptimize } from './auto-optimizer.js';
import type ImageData from './image_data';
@@ -12,6 +18,12 @@ type EncoderKey = keyof typeof encoders;
type PreprocessorKey = keyof typeof preprocessors;
type FileLike = Buffer | ArrayBuffer | string | ArrayBufferView;
type PreprocessOptions = {
resize?: ResizeOptions;
quant?: QuantOptions;
rotate?: RotateOptions;
};
async function decodeFile({
file,
}: {
@@ -183,10 +195,10 @@ class Image {
/**
* Define one or several preprocessors to use on the image.
* @param {object} preprocessOptions - An object with preprocessors to use, and their settings.
* @param {PreprocessOptions} preprocessOptions - An object with preprocessors to use, and their settings.
* @returns {Promise<undefined>} - A promise that resolves when all preprocessors have completed their work.
*/
async preprocess(preprocessOptions = {}) {
async preprocess(preprocessOptions: PreprocessOptions = {}) {
for (const [name, options] of Object.entries(preprocessOptions)) {
if (!Object.keys(preprocessors).includes(name)) {
throw Error(`Invalid preprocessor "${name}"`);