Remove baseline image decoders, refactor decodeFile

This commit is contained in:
Surma
2018-07-16 15:18:59 +01:00
parent 0f08121596
commit b7c223bc0d
6 changed files with 33 additions and 55 deletions

View File

@@ -1,9 +1,7 @@
import * as browserJPEG from './browser-jpeg/decoder';
import * as browserPNG from './browser-png/decoder';
import * as browserWebP from './browser-webp/decoder';
import * as wasmWebP from './webp/decoder';
import * as browserWebP from './browser-webp/decoder';
import { sniffMimeType } from '../lib/util';
import { createImageBitmapPolyfill, sniffMimeType } from '../lib/util';
export interface Decoder {
name: string;
@@ -15,10 +13,8 @@ export interface Decoder {
// We load all decoders and filter out the unsupported ones.
export const decodersPromise: Promise<Decoder[]> = Promise.all(
[
browserPNG,
browserJPEG,
wasmWebP,
browserWebP,
wasmWebP,
]
.map(async (decoder) => {
if (await decoder.isSupported()) {
@@ -38,3 +34,25 @@ export async function findDecoder(file: File): Promise<Decoder | undefined> {
}
return decoders.find(decoder => decoder.canHandleMimeType(mimeType));
}
const nativelySupportedMimeTypes = [
'image/jpeg',
'image/png',
'image/gif',
];
export async function decodeFile(file: File): Promise<ImageBitmap> {
const mimeType = await sniffMimeType(file);
if (!mimeType) {
throw new Error('Could not determine mime type');
}
if (nativelySupportedMimeTypes.includes(mimeType)) {
return createImageBitmapPolyfill(file);
}
const decoder = await findDecoder(file);
if (!decoder) {
throw new Error(`Cant decode files with mime type ${mimeType}`);
}
console.log(`Going with ${decoder.name}`);
return decoder.decode(file);
}