diff --git a/src/backend/model/threading/MetadataLoader.ts b/src/backend/model/threading/MetadataLoader.ts index a1aeab94..ca83624b 100644 --- a/src/backend/model/threading/MetadataLoader.ts +++ b/src/backend/model/threading/MetadataLoader.ts @@ -216,7 +216,17 @@ export class MetadataLoader { if (exif.Rating) { metadata.rating = (parseInt(exif.Rating.value, 10) as any); } - + if(exif.subject && exif.subject.value && exif.subject.value.length > 0){ + if(metadata.keywords == undefined) { + metadata.keywords = []; + } + for(let i=0; i < exif.subject.value.length; i++){ + const kw = exif.subject.value[i].description; + if(metadata.keywords.indexOf(kw) == -1) { + metadata.keywords.push(kw); + } + } + } if (exif.Orientation) { metadata.orientation = (parseInt(exif.Orientation.value as any, 10) as any); if (OrientationTypes.BOTTOM_LEFT < metadata.orientation) { diff --git a/test/backend/assets/test_png.json b/test/backend/assets/test_png.json index 5cc83c27..bc0d7b2c 100644 --- a/test/backend/assets/test_png.json +++ b/test/backend/assets/test_png.json @@ -20,6 +20,7 @@ } ], "fileSize": 4381, + "keywords": [], "orientation": 1, "size": { "height": 26, diff --git a/test/backend/assets/xmp/xmp_subject.jpg b/test/backend/assets/xmp/xmp_subject.jpg new file mode 100644 index 00000000..a10038af Binary files /dev/null and b/test/backend/assets/xmp/xmp_subject.jpg differ diff --git a/test/backend/assets/xmp/xmp_subject.json b/test/backend/assets/xmp/xmp_subject.json new file mode 100644 index 00000000..f06343db --- /dev/null +++ b/test/backend/assets/xmp/xmp_subject.json @@ -0,0 +1,22 @@ +{ + "cameraData": { + "ISO": 50, + "exposure": 0.007751937984496124, + "fStop": 2.4, + "focalLength": 4.32, + "make": "samsung", + "model": "SM-G975F" + }, + "creationDate": 1614703656000, + "fileSize": 4709, + "orientation": 1, + "keywords": [ + "Max", + "Spaß", + "Yanik" + ], + "size": { + "height": 5, + "width": 10 + } +} diff --git a/test/backend/unit/model/threading/MetaDataLoader.spec.ts b/test/backend/unit/model/threading/MetaDataLoader.spec.ts index 60e2bb1e..ad2c970c 100644 --- a/test/backend/unit/model/threading/MetaDataLoader.spec.ts +++ b/test/backend/unit/model/threading/MetaDataLoader.spec.ts @@ -26,6 +26,11 @@ describe('MetadataLoader', () => { expect(Utils.clone(data)).to.be.deep.equal(expected); }); + it('should load xmp section dc:subject into keywords', async () => { + const data = await MetadataLoader.loadPhotoMetadata(path.join(__dirname, '/../../../assets/xmp/xmp_subject.jpg')); + const expected = require(path.join(__dirname, '/../../../assets/xmp/xmp_subject.json')); + expect(Utils.clone(data)).to.be.deep.equal(expected); + }); it('should load jpg 2', async () => { const data = await MetadataLoader.loadPhotoMetadata(path.join(__dirname, '/../../../assets/old_photo.jpg'));