fix(server): keep image size priority for metadata

This commit is contained in:
holegots 2026-07-01 02:17:25 +08:00 committed by Holegots
parent 31472a712b
commit e3ea84a0d5
2 changed files with 12 additions and 15 deletions

View file

@ -875,8 +875,8 @@ describe('/asset', () => {
exifInfo: {
make: 'SONY',
model: 'ILCE-6300',
exifImageHeight: 4000,
exifImageWidth: 6000,
exifImageHeight: 4024,
exifImageWidth: 6048,
exposureTime: '1/320',
fNumber: 8,
focalLength: 97,
@ -897,8 +897,8 @@ describe('/asset', () => {
exifInfo: {
make: 'SONY',
model: 'ILCE-7M2',
exifImageHeight: 4000,
exifImageWidth: 6000,
exifImageHeight: 4024,
exifImageWidth: 6048,
exposureTime: '1.3',
fNumber: 22,
focalLength: 25,
@ -943,8 +943,8 @@ describe('/asset', () => {
exifInfo: {
make: 'FUJIFILM',
model: 'X100V',
exifImageHeight: 2944,
exifImageWidth: 4416,
exifImageHeight: 4160,
exifImageWidth: 6240,
exposureTime: '1/4000',
fNumber: 16,
focalLength: 23,

View file

@ -562,16 +562,13 @@ export class MetadataService extends BaseService {
private getImageDimensions(exifTags: ImmichTags): { width?: number; height?: number } {
/*
* The "true" values for width and height are a bit hidden, depending on the camera model and file format.
* ExifImageWidth/Height is the rendered image size for cropped RAWs, while ImageSize is still needed for
* formats where ImageWidth/ImageHeight point at the embedded preview.
* For RAW images in the CR2 or RAF format, the "ImageSize" value seems to be correct,
* but ImageWidth and ImageHeight are not correct (they contain the dimensions of the preview image).
*/
let [width, height] = [exifTags.ExifImageWidth, exifTags.ExifImageHeight];
if (!width || !height) {
[width, height] =
exifTags.ImageSize?.toString()
?.split('x')
?.map((dim) => Number.parseInt(dim) || undefined) ?? [];
}
let [width, height] =
exifTags.ImageSize?.toString()
?.split('x')
?.map((dim) => Number.parseInt(dim) || undefined) ?? [];
if (!width || !height) {
[width, height] = [exifTags.ImageWidth, exifTags.ImageHeight];
}