Fallback to fastBlur for Safari
This commit is contained in:
parent
f2e8768123
commit
3c1248b471
@ -1,14 +1,23 @@
|
|||||||
import { createWorkerInterface } from '../../util/createPostMessageInterface';
|
import { createWorkerInterface } from '../../util/createPostMessageInterface';
|
||||||
|
import fastBlur from '../fastBlur';
|
||||||
|
|
||||||
|
const FAST_BLUR_ITERATIONS = 2;
|
||||||
|
|
||||||
export async function blurThumb(canvas: OffscreenCanvas, dataUri: string, radius: number) {
|
export async function blurThumb(canvas: OffscreenCanvas, dataUri: string, radius: number) {
|
||||||
const imageBitmap = await dataUriToImageBitmap(dataUri);
|
const imageBitmap = await dataUriToImageBitmap(dataUri);
|
||||||
const { width, height } = canvas;
|
const { width, height } = canvas;
|
||||||
const ctx = canvas.getContext('2d')!;
|
const ctx = canvas.getContext('2d')!;
|
||||||
|
const isFilterSupported = 'filter' in ctx;
|
||||||
|
|
||||||
// Draw image twice to battle white-ish edges
|
if (isFilterSupported) {
|
||||||
ctx.drawImage(imageBitmap, 0, 0, width, height);
|
ctx.filter = `blur(${radius}px)`;
|
||||||
ctx.filter = `blur(${radius}px)`;
|
}
|
||||||
ctx.drawImage(imageBitmap, 0, 0, width, height);
|
|
||||||
|
ctx.drawImage(imageBitmap, -radius * 2, -radius * 2, width + radius * 4, height + radius * 4);
|
||||||
|
|
||||||
|
if (!isFilterSupported) {
|
||||||
|
fastBlur(ctx, 0, 0, width, height, radius, FAST_BLUR_ITERATIONS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dataUriToImageBitmap(dataUri: string) {
|
function dataUriToImageBitmap(dataUri: string) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user