diff --git a/.gitignore b/.gitignore index 52e3ab0..9658735 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ coverage/ # Misc. .DS_Store + +# VS Code +.vscode/ diff --git a/README.md b/README.md index 291c024..c14c62f 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,13 @@ returns it as an `int`. Retrieves '[Exif.Photo.PixelYDimension][exiv2-tags]' from the EXIF IFD and returns it as an `int`. +##### `Orientation` + +###### Description +Retrieves '[Exif.Photo.Orientation][exiv2-tags]' from the EXIF IFD and +returns it as an `int`. (Values from 1 to 8) + + ##### `DateTaken` ###### Description diff --git a/src/meta-data/definitions.js b/src/meta-data/definitions.js index af581aa..8f8a3ae 100644 --- a/src/meta-data/definitions.js +++ b/src/meta-data/definitions.js @@ -21,6 +21,13 @@ const definitions = { tagType: 2, ifd: 'exif', parse: parseExifDate + }, + + Orientation: { + tagId: 0x0112, + tagType: 3, + ifd: '0', + parse: parseInt } }; diff --git a/src/meta-data/exifValues.js b/src/meta-data/exifValues.js new file mode 100644 index 0000000..103d03d --- /dev/null +++ b/src/meta-data/exifValues.js @@ -0,0 +1,28 @@ +'use strict'; + +const EXIF_ORIENTATION = { + ROTATE_0: { + value: 1 + }, + ROTATE_0_SYMETRIC: { + value: 2 + }, + ROTATE_180: { + value: 3 + }, + ROTATE_180_SYMETRIC: { + value: 4 + }, + ROTATE_270_SYMETRIC: { + value: 5 + }, + ROTATE_270: { + value: 6 + }, + ROTATE_90_SYMETRIC: { + value: 7 + }, + ROTATE_90: { + value: 8 + } +} \ No newline at end of file diff --git a/tests/index.test.js b/tests/index.test.js index 68c2fd1..c8a4198 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -5,6 +5,8 @@ const path = require('path'), moment = require('moment'); const cr2Raw = require('../'); +const metaData = require('../src/meta-data'); +const exifValues = require('../src/meta-data/exifValues'); test('extract preview image from _MG_4122.CR2', () => { @@ -171,6 +173,28 @@ test('fetch date taken from _MG_8367.CR2', () => { expect(result).toEqual(dateTaken.toDate()); }); +test('fetch orientation taken from _MG_8367.CR2', () => { + +const orientationTaken = exifValues.EXIF_ORIENTATION.ROTATE_0; + const cr2Path = path.resolve(__dirname, 'res', '_MG_8367.CR2'); + + const raw = cr2Raw(cr2Path); + const result = raw.fetchMeta(cr2Raw.meta.Orientation); + + expect(result).toEqual(orientationTaken); +}); + +test('fetch orientation taken from _MG_0081.CR2', () => { + + const orientationTaken = exifValues.EXIF_ORIENTATION.ROTATE_90; + const cr2Path = path.resolve(__dirname, 'res', '_MG_0081.CR2'); + + const raw = cr2Raw(cr2Path); + const result = raw.fetchMeta(cr2Raw.meta.Orientation); + + expect(result).toEqual(orientationTaken); +}); + test('extract preview image from notraw.jpg', () => { const cr2Path = path.resolve(__dirname, 'res', 'notraw.jpg'); diff --git a/tests/meta-data/definitions.test.js b/tests/meta-data/definitions.test.js index ce8be8f..4f166a9 100644 --- a/tests/meta-data/definitions.test.js +++ b/tests/meta-data/definitions.test.js @@ -43,3 +43,17 @@ test('defines DateTaken', () => { expect(actual.tagType).toBe(tagType); expect(actual.ifd).toBe(ifd); }); + +test('defines Orientation', () => { + + const tagId = 0x0112; + const tagType = 3; + const ifd = '0'; + + const actual = definitions.Orientation; + + expect(actual).toBeDefined(); + expect(actual.tagId).toBe(tagId); + expect(actual.tagType).toBe(tagType); + expect(actual.ifd).toBe(ifd); +}); diff --git a/tests/meta-data/index.test.js b/tests/meta-data/index.test.js index 53c46c7..2447845 100644 --- a/tests/meta-data/index.test.js +++ b/tests/meta-data/index.test.js @@ -3,6 +3,7 @@ const moment = require('moment'); const metaData = require('../../src/meta-data'); +const { Orientation } = require('../../src/meta-data/definitions'); test('fetch fail, no ifd', () => { @@ -207,3 +208,19 @@ test('fetch height', () => { expect(actual).toBe(testHeight); }); + +test('fetch orientation', () => { + + const testOrientation = 1; + const testRaw = { + ifds: { + '0': { + 0x0112: { + tagValue: 1 + } + } + } + }; + const actual = metaData.fetch(testRaw, metaData.definitions.Orientation); + expect(actual).toBe(testOrientation); +}); diff --git a/tests/res/_MG_0081.CR2 b/tests/res/_MG_0081.CR2 new file mode 100644 index 0000000..dc0abb1 Binary files /dev/null and b/tests/res/_MG_0081.CR2 differ