mirror of
https://github.com/ente-io/ente.git
synced 2025-08-07 23:18:10 +00:00
Special case jp2 rendering
This commit is contained in:
parent
c86be54ac1
commit
d0f585fc97
@ -26,6 +26,15 @@ const needsJPEGConversionExtensions = [
|
|||||||
export const needsJPEGConversion = (extension: string) =>
|
export const needsJPEGConversion = (extension: string) =>
|
||||||
needsJPEGConversionExtensions.includes(extension.toLowerCase());
|
needsJPEGConversionExtensions.includes(extension.toLowerCase());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if {@link extension} _might_ be supported by the user's browser.
|
||||||
|
*
|
||||||
|
* For example, JPEG 2000 (jp2) is supported by Safari, but not by Chrome or
|
||||||
|
* Firefox, and this function will return true for `jp2`.
|
||||||
|
*/
|
||||||
|
export const hasPartialBrowserSupport = (extension: string) =>
|
||||||
|
["jp2"].includes(extension.toLowerCase());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return `true` if {@link extension} in for an HEIC-like file.
|
* Return `true` if {@link extension} in for an HEIC-like file.
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { needsJPEGConversion } from "@/media/formats";
|
import { hasPartialBrowserSupport, needsJPEGConversion } from "@/media/formats";
|
||||||
import { heicToJPEG } from "@/media/heic-convert";
|
import { heicToJPEG } from "@/media/heic-convert";
|
||||||
import { isDesktop } from "@/next/app";
|
import { isDesktop } from "@/next/app";
|
||||||
import log from "@/next/log";
|
import log from "@/next/log";
|
||||||
@ -130,21 +130,25 @@ export const renderableImageBlob = async (
|
|||||||
return await heicToJPEG(imageBlob);
|
return await heicToJPEG(imageBlob);
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
// Continue if it might be possibly supported in some browsers,
|
||||||
|
// otherwise bail out.
|
||||||
|
if (!hasPartialBrowserSupport(extension)) return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Either it is something that the browser already knows how to render
|
||||||
|
// (e.g. JPEG/PNG), or is a file extension that might be supported in
|
||||||
|
// some browsers (e.g. JPEG 2000), or a file extension that we haven't
|
||||||
|
// specifically whitelisted for conversion (any arbitrary extension not
|
||||||
|
// part of `needsJPEGConversion`).
|
||||||
|
//
|
||||||
|
// Give it to the browser, attaching the mime type if possible.
|
||||||
|
|
||||||
|
const mimeType = fileTypeInfo.mimeType;
|
||||||
|
if (!mimeType) {
|
||||||
|
log.info("Trying to render a file without a MIME type", fileName);
|
||||||
|
return imageBlob;
|
||||||
} else {
|
} else {
|
||||||
// Either it is something that the browser already knows how to
|
return new Blob([imageBlob], { type: mimeType });
|
||||||
// render, or a file extension that we haven't specifically
|
|
||||||
// whitelisted for conversion.
|
|
||||||
const mimeType = fileTypeInfo.mimeType;
|
|
||||||
if (!mimeType) {
|
|
||||||
log.info(
|
|
||||||
"Trying to render a file without a MIME type",
|
|
||||||
fileName,
|
|
||||||
);
|
|
||||||
return imageBlob;
|
|
||||||
} else {
|
|
||||||
return new Blob([imageBlob], { type: mimeType });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.error(`Failed to get renderable image for ${fileName}`, e);
|
log.error(`Failed to get renderable image for ${fileName}`, e);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user