mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-14 17:49:52 +00:00
Add encode() and decode() types
This commit is contained in:
@@ -9,6 +9,23 @@ import { cpus } from 'os';
|
|||||||
hardwareConcurrency: cpus().length,
|
hardwareConcurrency: cpus().length,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface DecodeModule extends EmscriptenWasm.Module {
|
||||||
|
decode: (data: Uint8Array) => any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EncodeModule extends EmscriptenWasm.Module {
|
||||||
|
encode: (
|
||||||
|
data: Uint8ClampedArray | ArrayBuffer,
|
||||||
|
width: number,
|
||||||
|
height: number,
|
||||||
|
opts: any,
|
||||||
|
) => Uint8Array;
|
||||||
|
}
|
||||||
|
|
||||||
|
type DecodeModuleFactory = EmscriptenWasm.ModuleFactory<DecodeModule>;
|
||||||
|
|
||||||
|
type EncodeModuleFactory = EmscriptenWasm.ModuleFactory<EncodeModule>;
|
||||||
|
|
||||||
interface RotateModuleInstance {
|
interface RotateModuleInstance {
|
||||||
exports: {
|
exports: {
|
||||||
memory: WebAssembly.Memory;
|
memory: WebAssembly.Memory;
|
||||||
@@ -264,8 +281,10 @@ export const codecs = {
|
|||||||
name: 'MozJPEG',
|
name: 'MozJPEG',
|
||||||
extension: 'jpg',
|
extension: 'jpg',
|
||||||
detectors: [/^\xFF\xD8\xFF/],
|
detectors: [/^\xFF\xD8\xFF/],
|
||||||
dec: () => instantiateEmscriptenWasm(mozDec, mozDecWasm),
|
dec: () =>
|
||||||
enc: () => instantiateEmscriptenWasm(mozEnc, mozEncWasm),
|
instantiateEmscriptenWasm(mozDec as DecodeModuleFactory, mozDecWasm),
|
||||||
|
enc: () =>
|
||||||
|
instantiateEmscriptenWasm(mozEnc as EncodeModuleFactory, mozEncWasm),
|
||||||
defaultEncoderOptions: {
|
defaultEncoderOptions: {
|
||||||
quality: 75,
|
quality: 75,
|
||||||
baseline: false,
|
baseline: false,
|
||||||
@@ -294,8 +313,10 @@ export const codecs = {
|
|||||||
name: 'WebP',
|
name: 'WebP',
|
||||||
extension: 'webp',
|
extension: 'webp',
|
||||||
detectors: [/^RIFF....WEBPVP8[LX ]/s],
|
detectors: [/^RIFF....WEBPVP8[LX ]/s],
|
||||||
dec: () => instantiateEmscriptenWasm(webpDec, webpDecWasm),
|
dec: () =>
|
||||||
enc: () => instantiateEmscriptenWasm(webpEnc, webpEncWasm),
|
instantiateEmscriptenWasm(webpDec as DecodeModuleFactory, webpDecWasm),
|
||||||
|
enc: () =>
|
||||||
|
instantiateEmscriptenWasm(webpEnc as EncodeModuleFactory, webpEncWasm),
|
||||||
defaultEncoderOptions: {
|
defaultEncoderOptions: {
|
||||||
quality: 75,
|
quality: 75,
|
||||||
target_size: 0,
|
target_size: 0,
|
||||||
@@ -335,16 +356,20 @@ export const codecs = {
|
|||||||
name: 'AVIF',
|
name: 'AVIF',
|
||||||
extension: 'avif',
|
extension: 'avif',
|
||||||
detectors: [/^\x00\x00\x00 ftypavif\x00\x00\x00\x00/],
|
detectors: [/^\x00\x00\x00 ftypavif\x00\x00\x00\x00/],
|
||||||
dec: () => instantiateEmscriptenWasm(avifDec, avifDecWasm),
|
dec: () =>
|
||||||
|
instantiateEmscriptenWasm(avifDec as DecodeModuleFactory, avifDecWasm),
|
||||||
enc: async () => {
|
enc: async () => {
|
||||||
if (await threads()) {
|
if (await threads()) {
|
||||||
return instantiateEmscriptenWasm(
|
return instantiateEmscriptenWasm(
|
||||||
avifEncMt,
|
avifEncMt as EncodeModuleFactory,
|
||||||
avifEncMtWasm,
|
avifEncMtWasm,
|
||||||
avifEncMtWorker,
|
avifEncMtWorker,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return instantiateEmscriptenWasm(avifEnc, avifEncWasm);
|
return instantiateEmscriptenWasm(
|
||||||
|
avifEnc as EncodeModuleFactory,
|
||||||
|
avifEncWasm,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
defaultEncoderOptions: {
|
defaultEncoderOptions: {
|
||||||
cqLevel: 33,
|
cqLevel: 33,
|
||||||
@@ -368,8 +393,10 @@ export const codecs = {
|
|||||||
name: 'JPEG-XL',
|
name: 'JPEG-XL',
|
||||||
extension: 'jxl',
|
extension: 'jxl',
|
||||||
detectors: [/^\xff\x0a/],
|
detectors: [/^\xff\x0a/],
|
||||||
dec: () => instantiateEmscriptenWasm(jxlDec, jxlDecWasm),
|
dec: () =>
|
||||||
enc: () => instantiateEmscriptenWasm(jxlEnc, jxlEncWasm),
|
instantiateEmscriptenWasm(jxlDec as DecodeModuleFactory, jxlDecWasm),
|
||||||
|
enc: () =>
|
||||||
|
instantiateEmscriptenWasm(jxlEnc as EncodeModuleFactory, jxlEncWasm),
|
||||||
defaultEncoderOptions: {
|
defaultEncoderOptions: {
|
||||||
speed: 4,
|
speed: 4,
|
||||||
quality: 75,
|
quality: 75,
|
||||||
@@ -389,8 +416,10 @@ export const codecs = {
|
|||||||
name: 'WebP2',
|
name: 'WebP2',
|
||||||
extension: 'wp2',
|
extension: 'wp2',
|
||||||
detectors: [/^\xF4\xFF\x6F/],
|
detectors: [/^\xF4\xFF\x6F/],
|
||||||
dec: () => instantiateEmscriptenWasm(wp2Dec, wp2DecWasm),
|
dec: () =>
|
||||||
enc: () => instantiateEmscriptenWasm(wp2Enc, wp2EncWasm),
|
instantiateEmscriptenWasm(wp2Dec as DecodeModuleFactory, wp2DecWasm),
|
||||||
|
enc: () =>
|
||||||
|
instantiateEmscriptenWasm(wp2Enc as EncodeModuleFactory, wp2EncWasm),
|
||||||
defaultEncoderOptions: {
|
defaultEncoderOptions: {
|
||||||
quality: 75,
|
quality: 75,
|
||||||
alpha_quality: 75,
|
alpha_quality: 75,
|
||||||
@@ -421,7 +450,7 @@ export const codecs = {
|
|||||||
await oxipngPromise;
|
await oxipngPromise;
|
||||||
return {
|
return {
|
||||||
encode: (
|
encode: (
|
||||||
buffer: Uint8Array,
|
buffer: Uint8ClampedArray | ArrayBuffer,
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
opts: { level: number },
|
opts: { level: number },
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export function instantiateEmscriptenWasm<T extends EmscriptenWasm.Module>(
|
|||||||
factory: EmscriptenWasm.ModuleFactory<T>,
|
factory: EmscriptenWasm.ModuleFactory<T>,
|
||||||
path: string,
|
path: string,
|
||||||
workerJS: string = '',
|
workerJS: string = '',
|
||||||
): Promise<any> {
|
): Promise<T> {
|
||||||
return factory({
|
return factory({
|
||||||
locateFile(requestPath) {
|
locateFile(requestPath) {
|
||||||
// The glue code generated by emscripten uses the original
|
// The glue code generated by emscripten uses the original
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ async function encodeImage({
|
|||||||
}: {
|
}: {
|
||||||
bitmap: ImageData;
|
bitmap: ImageData;
|
||||||
encName: EncoderKey;
|
encName: EncoderKey;
|
||||||
encConfig: string | { [key: string]: any };
|
encConfig: any;
|
||||||
optimizerButteraugliTarget: number;
|
optimizerButteraugliTarget: number;
|
||||||
maxOptimizerRounds: number;
|
maxOptimizerRounds: number;
|
||||||
}) {
|
}) {
|
||||||
@@ -94,7 +94,7 @@ async function encodeImage({
|
|||||||
bitmapIn.data,
|
bitmapIn.data,
|
||||||
bitmapIn.width,
|
bitmapIn.width,
|
||||||
bitmapIn.height,
|
bitmapIn.height,
|
||||||
Object.assign({}, encoders[encName].defaultEncoderOptions, {
|
Object.assign({}, encoders[encName].defaultEncoderOptions as any, {
|
||||||
[optionToOptimize]: quality,
|
[optionToOptimize]: quality,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user