Delay generating blur data to avoid race condition
This commit is contained in:
parent
4d30f476fd
commit
bab7477e7d
@ -41,34 +41,39 @@ export default function PhotoForm({
|
|||||||
image.crossOrigin = 'anonymous';
|
image.crossOrigin = 'anonymous';
|
||||||
image.src = url;
|
image.src = url;
|
||||||
image.onload = () => {
|
image.onload = () => {
|
||||||
const canvas = canvasRef.current;
|
const timeout = setTimeout(() => {
|
||||||
if (canvas) {
|
const canvas = canvasRef.current;
|
||||||
canvas.width = THUMBNAIL_WIDTH * BLUR_SCALE;
|
if (canvas) {
|
||||||
canvas.height = THUMBNAIL_HEIGHT * BLUR_SCALE;
|
canvas.width = THUMBNAIL_WIDTH * BLUR_SCALE;
|
||||||
canvas.style.width = `${THUMBNAIL_WIDTH}px`;
|
canvas.height = THUMBNAIL_HEIGHT * BLUR_SCALE;
|
||||||
canvas.style.height = `${THUMBNAIL_HEIGHT}px`;
|
canvas.style.width = `${THUMBNAIL_WIDTH}px`;
|
||||||
const context = canvasRef.current?.getContext('2d');
|
canvas.style.height = `${THUMBNAIL_HEIGHT}px`;
|
||||||
if (context) {
|
const context = canvasRef.current?.getContext('2d');
|
||||||
context.scale(BLUR_SCALE, BLUR_SCALE);
|
if (context) {
|
||||||
context.filter =
|
context.scale(BLUR_SCALE, BLUR_SCALE);
|
||||||
'contrast(1.2) saturate(1.2)' +
|
context.filter =
|
||||||
`blur(${BLUR_SCALE * 10}px)`;
|
'contrast(1.2) saturate(1.2)' +
|
||||||
context.drawImage(
|
`blur(${BLUR_SCALE * 10}px)`;
|
||||||
image,
|
context.drawImage(
|
||||||
-EDGE_BLUR_COMPENSATION,
|
image,
|
||||||
-EDGE_BLUR_COMPENSATION,
|
-EDGE_BLUR_COMPENSATION,
|
||||||
THUMBNAIL_WIDTH + EDGE_BLUR_COMPENSATION * 2,
|
-EDGE_BLUR_COMPENSATION,
|
||||||
THUMBNAIL_WIDTH * image.height / image.width
|
THUMBNAIL_WIDTH + EDGE_BLUR_COMPENSATION * 2,
|
||||||
+ EDGE_BLUR_COMPENSATION * 2,
|
THUMBNAIL_WIDTH * image.height / image.width
|
||||||
);
|
+ EDGE_BLUR_COMPENSATION * 2,
|
||||||
if (type === 'create') {
|
);
|
||||||
setFormData(data => ({
|
if (type === 'create') {
|
||||||
...data,
|
setFormData(data => ({
|
||||||
blurData: canvas.toDataURL('image/jpeg', BLUE_JPEG_QUALITY),
|
...data,
|
||||||
}));
|
blurData: canvas.toDataURL('image/jpeg', BLUE_JPEG_QUALITY),
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.error('Cannot generate blur data: canvas not found');
|
||||||
}
|
}
|
||||||
}
|
}, 1000);
|
||||||
|
return () => clearTimeout(timeout);
|
||||||
};
|
};
|
||||||
}, [url, type]);
|
}, [url, type]);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user