"native" to "builtin" (#788)
This commit is contained in:
@ -1,19 +1,19 @@
|
||||
import { nativeDecode, sniffMimeType, canDecodeImage } from '../lib/util';
|
||||
import { builtinDecode, sniffMimeType, canDecodeImage } from '../lib/util';
|
||||
import Processor from './processor';
|
||||
import webpDataUrl from 'url-loader!./tiny.webp';
|
||||
|
||||
const nativeWebPSupported = canDecodeImage(webpDataUrl);
|
||||
const webPSupported = canDecodeImage(webpDataUrl);
|
||||
|
||||
export async function decodeImage(blob: Blob, processor: Processor): Promise<ImageData> {
|
||||
const mimeType = await sniffMimeType(blob);
|
||||
|
||||
try {
|
||||
if (mimeType === 'image/webp' && !(await nativeWebPSupported)) {
|
||||
if (mimeType === 'image/webp' && !(await webPSupported)) {
|
||||
return await processor.webpDecode(blob);
|
||||
}
|
||||
|
||||
// Otherwise, just throw it at the browser's decoder.
|
||||
return await nativeDecode(blob);
|
||||
return await builtinDecode(blob);
|
||||
} catch (err) {
|
||||
throw Error("Couldn't decode image");
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { nativeResize, NativeResizeMethod, drawableToImageData } from '../../lib/util';
|
||||
import { builtinResize, BuiltinResizeMethod, drawableToImageData } from '../../lib/util';
|
||||
import { BrowserResizeOptions, VectorResizeOptions } from './processor-meta';
|
||||
import { getContainOffsets } from './util';
|
||||
|
||||
@ -12,9 +12,9 @@ export function browserResize(data: ImageData, opts: BrowserResizeOptions): Imag
|
||||
({ sx, sy, sw, sh } = getContainOffsets(sw, sh, opts.width, opts.height));
|
||||
}
|
||||
|
||||
return nativeResize(
|
||||
return builtinResize(
|
||||
data, sx, sy, sw, sh, opts.width, opts.height,
|
||||
opts.method.slice('browser-'.length) as NativeResizeMethod,
|
||||
opts.method.slice('browser-'.length) as BuiltinResizeMethod,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -12,8 +12,8 @@ export default class Select extends Component<Props, State> {
|
||||
|
||||
return (
|
||||
<div class={style.select}>
|
||||
<select class={`${style.nativeSelect} ${large ? style.large : ''}`} {...otherProps}/>
|
||||
<svg class={style.arrow} viewBox="0 0 10 5"><path d="M0 0l5 5 5-5z"/></svg>
|
||||
<select class={`${style.builtinSelect} ${large ? style.large : ''}`} {...otherProps} />
|
||||
<svg class={style.arrow} viewBox="0 0 10 5"><path d="M0 0l5 5 5-5z" /></svg>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.native-select {
|
||||
.builtin-select {
|
||||
background: #2f2f2f;
|
||||
border-radius: 4px;
|
||||
font: inherit;
|
||||
|
@ -163,7 +163,7 @@ export function drawableToImageData(
|
||||
return ctx.getImageData(0, 0, width, height);
|
||||
}
|
||||
|
||||
export async function nativeDecode(blob: Blob): Promise<ImageData> {
|
||||
export async function builtinDecode(blob: Blob): Promise<ImageData> {
|
||||
// Prefer createImageBitmap as it's the off-thread option for Firefox.
|
||||
const drawable = 'createImageBitmap' in self ?
|
||||
await createImageBitmap(blob) : await blobToImg(blob);
|
||||
@ -171,13 +171,13 @@ export async function nativeDecode(blob: Blob): Promise<ImageData> {
|
||||
return drawableToImageData(drawable);
|
||||
}
|
||||
|
||||
export type NativeResizeMethod = 'pixelated' | 'low' | 'medium' | 'high';
|
||||
export type BuiltinResizeMethod = 'pixelated' | 'low' | 'medium' | 'high';
|
||||
|
||||
export function nativeResize(
|
||||
export function builtinResize(
|
||||
data: ImageData,
|
||||
sx: number, sy: number, sw: number, sh: number,
|
||||
dw: number, dh: number,
|
||||
method: NativeResizeMethod,
|
||||
method: BuiltinResizeMethod,
|
||||
): ImageData {
|
||||
const canvasSource = document.createElement('canvas');
|
||||
canvasSource.width = data.width;
|
||||
|
@ -116,7 +116,7 @@ export async function cacheAdditionalProcessors(cacheName: string, buildAssets:
|
||||
return createImageBitmap(blob).then(() => true, () => false);
|
||||
})();
|
||||
|
||||
// No point caching the WebP decoder if it's supported natively:
|
||||
// No point caching the WebP decoder if the browser supports it:
|
||||
if (supportsWebP) {
|
||||
toCache = toCache.filter(asset => !/webp[\-_]dec/.test(asset));
|
||||
}
|
||||
|
Reference in New Issue
Block a user