From cc0cbd705edf6ec09e9b54d85b81658ff2cc52a7 Mon Sep 17 00:00:00 2001 From: ayykamp <32194363+ayykamp@users.noreply.github.com> Date: Wed, 29 Jan 2025 00:27:28 +0100 Subject: [PATCH] feat: add support for JPEG 2000 (#15710) * chore(server): add support for .jp2 * docs: add support for .jp2 * chore: fix tests * fix formatting * unify sorting --- docs/docs/features/supported-formats.md | 33 ++++++++++--------- .../src/services/asset-media.service.spec.ts | 1 + server/src/utils/mime-types.spec.ts | 1 + server/src/utils/mime-types.ts | 1 + 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/docs/docs/features/supported-formats.md b/docs/docs/features/supported-formats.md index bb6d00a100fcd..0881d844ac3c3 100644 --- a/docs/docs/features/supported-formats.md +++ b/docs/docs/features/supported-formats.md @@ -8,22 +8,23 @@ For the full list, refer to the [Immich source code](https://github.com/immich-a ## Image formats -| Format | Extension(s) | Supported? | Notes | -| :-------- | :---------------------------- | :----------------: | :-------------- | -| `AVIF` | `.avif` | :white_check_mark: | | -| `BMP` | `.bmp` | :white_check_mark: | | -| `GIF` | `.gif` | :white_check_mark: | | -| `HEIC` | `.heic` | :white_check_mark: | | -| `HEIF` | `.heif` | :white_check_mark: | | -| `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | | -| `JPEG XL` | `.jxl` | :white_check_mark: | | -| `PNG` | `.webp` | :white_check_mark: | | -| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | -| `RAW` | `.raw` | :white_check_mark: | | -| `RW2` | `.rw2` | :white_check_mark: | | -| `SVG` | `.svg` | :white_check_mark: | | -| `TIFF` | `.tif` `.tiff` | :white_check_mark: | | -| `WEBP` | `.webp` | :white_check_mark: | | +| Format | Extension(s) | Supported? | Notes | +| :---------- | :---------------------------- | :----------------: | :-------------- | +| `AVIF` | `.avif` | :white_check_mark: | | +| `BMP` | `.bmp` | :white_check_mark: | | +| `GIF` | `.gif` | :white_check_mark: | | +| `HEIC` | `.heic` | :white_check_mark: | | +| `HEIF` | `.heif` | :white_check_mark: | | +| `JPEG 2000` | `.jp2` | :white_check_mark: | | +| `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | | +| `JPEG XL` | `.jxl` | :white_check_mark: | | +| `PNG` | `.webp` | :white_check_mark: | | +| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | +| `RAW` | `.raw` | :white_check_mark: | | +| `RW2` | `.rw2` | :white_check_mark: | | +| `SVG` | `.svg` | :white_check_mark: | | +| `TIFF` | `.tif` `.tiff` | :white_check_mark: | | +| `WEBP` | `.webp` | :white_check_mark: | | ## Video formats diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index 9dcfa3cbd9ce5..9ebaa80d211ec 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -73,6 +73,7 @@ const validImages = [ '.heic', '.heif', '.iiq', + '.jp2', '.jpeg', '.jpg', '.jxl', diff --git a/server/src/utils/mime-types.spec.ts b/server/src/utils/mime-types.spec.ts index bf471fc1d537c..6c2f92c2eecab 100644 --- a/server/src/utils/mime-types.spec.ts +++ b/server/src/utils/mime-types.spec.ts @@ -22,6 +22,7 @@ describe('mimeTypes', () => { { mimetype: 'image/heif', extension: '.heif' }, { mimetype: 'image/hif', extension: '.hif' }, { mimetype: 'image/iiq', extension: '.iiq' }, + { mimetype: 'image/jp2', extension: '.jp2' }, { mimetype: 'image/jpeg', extension: '.jpe' }, { mimetype: 'image/jpeg', extension: '.jpeg' }, { mimetype: 'image/jpeg', extension: '.jpg' }, diff --git a/server/src/utils/mime-types.ts b/server/src/utils/mime-types.ts index 6e1b4f083b170..37dfe8153a5e7 100644 --- a/server/src/utils/mime-types.ts +++ b/server/src/utils/mime-types.ts @@ -43,6 +43,7 @@ const image: Record = { '.heif': ['image/heif'], '.hif': ['image/hif'], '.insp': ['image/jpeg'], + '.jp2': ['image/jp2'], '.jpe': ['image/jpeg'], '.jpeg': ['image/jpeg'], '.jpg': ['image/jpeg'],