@metadata/exif
Version:
[fork exif-js] Reads Files Metadata In The Browser And Node.JS. Optimised With Google Closure Compiler, BugFixes And New Features.
140 lines (114 loc) • 6.44 kB
Markdown
# @metadata/exif
[](https://npmjs.org/package/@metadata/exif)
`@metadata/exif` is [fork](https://github.com/exif-js/exif-js) of JavaScript Library For Reading EXIF Image Metadata. It Reads Files Metadata In The Browser. The package has been optimised with _Google Closure Compiler_.
The differences to the original package is that at the moment, only the `handleBinaryFile` method is implemented. There are also some bug-fixes and features, including the options to parse dates into _Date_ object, the coordinates format specification option, and correct parsing of UTF-8 data which was wrong in the origin. The _XMP_ support has been removed for a near future. _IPTC_ tags will have names consistent with [`exiftool`](https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html).
```sh
yarn add -E @metadata/exif
```
## Table Of Contents
- [Table Of Contents](#table-of-contents)
- [Usage](#usage)
- [API](#api)
- [`handleBinaryData(binFile: ArrayBuffer, config?: HandleBinaryFile): { data, iptcdata }`](#handlebinarydatabinfile-arraybufferconfig-handlebinaryfile--data-iptcdata-)
* [`_exif.HandleBinaryFile`](#type-_exifhandlebinaryfile)
- [Copyright](#copyright)
<p align="center"><a href="#table-of-contents"><img src=".documentary/section-breaks/0.svg?sanitize=true"></a></p>
## Usage
There are 3 ways to use the package:
1. As an ES6 module, because the `module` field of the _package.json_ file is set to `src/index.js` which exports a ES6 module.
2. As a CommonJS module, because the `main` field of the _package.json_ file is set to `build/index.js` which is the same as the module, but where the import/export statements have been transpiled into `module.exports` and `require`.
3. As a browser bundle, compiled with _GCC_ that sets the `window.EXIF` object to the package API. To do that, grab the file from the [dist](dist) folder and add it to the page.
## API
During development, the package is available by importing its named functions:
```js
import { handleBinaryData } from '@metadata/exif'
```
<p align="center"><a href="#table-of-contents"><img src=".documentary/section-breaks/1.svg?sanitize=true"></a></p>
## `handleBinaryData(`<br/> `binFile: ArrayBuffer,`<br/> `config?: HandleBinaryFile,`<br/>`): { data, iptcdata }`
Extract metadata from the _ArrayBuffer_.

```js
import { inspect } from 'util'
import { readBuffer } from '@wrote/read'
import { handleBinaryFile } from '@metadata/exif'
(async () => {
const { buffer: photo } = (await readBuffer('test/fixture/images/photo.jpg'))
const res = handleBinaryFile(photo, {
parseDates: true,
coordinates: 'dms',
})
console.log(inspect(res, null, 100))
})()
```
```js
{ data:
{ Make: 'Canon',
Model: 'Canon EOS 400D DIGITAL',
Orientation: 1,
XResolution: { [Number: 72] numerator: 72, denominator: 1 },
YResolution: { [Number: 72] numerator: 72, denominator: 1 },
ResolutionUnit: 2,
DateTime: 2015-06-20T20:10:14.000Z,
Copyright: 'î† ∂éçø',
ExifIFDPointer: 218,
GPSInfoIFDPointer: 648,
ExposureTime: { [Number: 0.04] numerator: 1, denominator: 25 },
FNumber: { [Number: 1.6] numerator: 8, denominator: 5 },
ExposureProgram: 'Aperture priority',
ISOSpeedRatings: 200,
ExifVersion: '0221',
DateTimeOriginal: 2015-06-20T20:10:14.000Z,
DateTimeDigitized: 2015-06-20T20:10:14.000Z,
ComponentsConfiguration: 'YCbCr',
ShutterSpeedValue: 4.64385986328125,
ApertureValue: { [Number: 1.35614013671875] numerator: 22219, denominator: 16384 },
ExposureBias: 0,
MaxApertureValue: { [Number: 1.3989796723380756] numerator: 53199, denominator: 38027 },
MeteringMode: 'Pattern',
Flash: 'Flash did not fire, compulsory flash mode',
FocalLength: { [Number: 50] numerator: 50, denominator: 1 },
FlashpixVersion: '0100',
ColorSpace: 1,
PixelXDimension: 250,
PixelYDimension: 167,
FocalPlaneXResolution: { [Number: 3210.94640682095] numerator: 2636187, denominator: 821 },
FocalPlaneYResolution: { [Number: 3230.2405498281787] numerator: 940000, denominator: 291 },
FocalPlaneResolutionUnit: 2,
CustomRendered: 'Normal process',
ExposureMode: 0,
WhiteBalance: 'Auto white balance',
SceneCaptureType: 'Standard',
GPSVersionID: '2.3.0.0',
GPSLatitudeRef: 'N',
GPSLatitude:
[ { [Number: 40] numerator: 40, denominator: 1 },
{ [Number: 15] numerator: 15, denominator: 1 },
{ [Number: 3.2471999364524584] numerator: 40879, denominator: 12589 } ],
GPSLongitudeRef: 'W',
GPSLongitude:
[ { [Number: 75] numerator: 75, denominator: 1 },
{ [Number: 7] numerator: 7, denominator: 1 },
{ [Number: 57.5688] numerator: 71961, denominator: 1250 } ],
thumbnail: {} },
iptcdata:
{ Category: 'ANI',
'Caption-Abstract': 'A black cat looking into the camera.',
Keywords: [ 'Animal', 'Cat', 'Pet' ],
Credit: 'Art Deco',
DateCreated: '20150620',
'By-lineTitle': [ 'Photographer', 'Owner' ],
'Writer-Editor': [ 'Art', 'Deco' ],
Headline: 'Black Cat',
CopyrightNotice: '© î† ∂éçø 2019, All rights reserved.',
'By-line': [ 'Anton', 'His Friend' ] } }
```
__<a name="type-_exifhandlebinaryfile">`_exif.HandleBinaryFile`</a>__: Options for the `handleBinaryFile` method.
| Name | Type | Description | Default |
| ----------- | ---------------- | --------------------------------------------------------------------------------------------------------------------- | ------- |
| parseDates | <em>boolean</em> | Parse EXIF dates into JS dates. | `false` |
| coordinates | <em>string</em> | Return coordinates either as DMS (degrees, minutes, seconds) or DD (decimal degrees). Specified as `'dms'` or `'dd'`. | `dms` |
<p align="center"><a href="#table-of-contents"><img src=".documentary/section-breaks/2.svg?sanitize=true"></a></p>
## Copyright
(c) [Demimonde][1] 2019
[1]: https://demimonde.cc
<p align="center"><a href="#table-of-contents"><img src=".documentary/section-breaks/-1.svg?sanitize=true"></a></p>