forked from external-repos/squoosh
56 lines
1.1 KiB
TypeScript
56 lines
1.1 KiB
TypeScript
import {
|
|
builtinResize,
|
|
BuiltinResizeMethod,
|
|
drawableToImageData,
|
|
} from 'client/util';
|
|
import { BrowserResizeOptions, VectorResizeOptions } from '../shared/meta';
|
|
import { getContainOffsets } from '../shared/util';
|
|
|
|
export function browserResize(
|
|
data: ImageData,
|
|
opts: BrowserResizeOptions,
|
|
): ImageData {
|
|
let sx = 0;
|
|
let sy = 0;
|
|
let sw = data.width;
|
|
let sh = data.height;
|
|
|
|
if (opts.fitMethod === 'contain') {
|
|
({ sx, sy, sw, sh } = getContainOffsets(sw, sh, opts.width, opts.height));
|
|
}
|
|
|
|
return builtinResize(
|
|
data,
|
|
sx,
|
|
sy,
|
|
sw,
|
|
sh,
|
|
opts.width,
|
|
opts.height,
|
|
opts.method.slice('browser-'.length) as BuiltinResizeMethod,
|
|
);
|
|
}
|
|
|
|
export function vectorResize(
|
|
data: HTMLImageElement,
|
|
opts: VectorResizeOptions,
|
|
): ImageData {
|
|
let sx = 0;
|
|
let sy = 0;
|
|
let sw = data.width;
|
|
let sh = data.height;
|
|
|
|
if (opts.fitMethod === 'contain') {
|
|
({ sx, sy, sw, sh } = getContainOffsets(sw, sh, opts.width, opts.height));
|
|
}
|
|
|
|
return drawableToImageData(data, {
|
|
sx,
|
|
sy,
|
|
sw,
|
|
sh,
|
|
width: opts.width,
|
|
height: opts.height,
|
|
});
|
|
}
|