130 lines
3.2 KiB
JavaScript
130 lines
3.2 KiB
JavaScript
/*
|
|
* JavaScript Load Image IPTC Map
|
|
* https://github.com/blueimp/JavaScript-Load-Image
|
|
*
|
|
* Copyright 2013, Sebastian Tschan
|
|
* Copyright 2018, Dave Bevan
|
|
*
|
|
* IPTC tags mapping based on
|
|
* https://github.com/jseidelin/exif-js
|
|
* https://iptc.org/standards/photo-metadata
|
|
* http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf
|
|
*
|
|
* Licensed under the MIT license:
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
/* global define, module, require */
|
|
|
|
;(function(factory) {
|
|
'use strict'
|
|
if (typeof define === 'function' && define.amd) {
|
|
// Register as an anonymous AMD module:
|
|
define(['./load-image', './load-image-iptc'], factory)
|
|
} else if (typeof module === 'object' && module.exports) {
|
|
factory(require('./load-image'), require('./load-image-iptc'))
|
|
} else {
|
|
// Browser globals:
|
|
factory(window.loadImage)
|
|
}
|
|
})(function(loadImage) {
|
|
'use strict'
|
|
|
|
loadImage.IptcMap.prototype.tags = {
|
|
// ==========
|
|
// IPTC tags:
|
|
// ==========
|
|
0x03: 'ObjectType',
|
|
0x04: 'ObjectAttribute',
|
|
0x05: 'ObjectName',
|
|
0x07: 'EditStatus',
|
|
0x08: 'EditorialUpdate',
|
|
0x0a: 'Urgency',
|
|
0x0c: 'SubjectRef',
|
|
0x0f: 'Category',
|
|
0x14: 'SupplCategory',
|
|
0x16: 'FixtureID',
|
|
0x19: 'Keywords',
|
|
0x1a: 'ContentLocCode',
|
|
0x1b: 'ContentLocName',
|
|
0x1e: 'ReleaseDate',
|
|
0x23: 'ReleaseTime',
|
|
0x25: 'ExpirationDate',
|
|
0x26: 'ExpirationTime',
|
|
0x28: 'SpecialInstructions',
|
|
0x2a: 'ActionAdvised',
|
|
0x2d: 'RefService',
|
|
0x2f: 'RefDate',
|
|
0x32: 'RefNumber',
|
|
0x37: 'DateCreated',
|
|
0x3c: 'TimeCreated',
|
|
0x3e: 'DigitalCreationDate',
|
|
0x3f: 'DigitalCreationTime',
|
|
0x41: 'OriginatingProgram',
|
|
0x46: 'ProgramVersion',
|
|
0x4b: 'ObjectCycle',
|
|
0x50: 'Byline',
|
|
0x55: 'BylineTitle',
|
|
0x5a: 'City',
|
|
0x5c: 'Sublocation',
|
|
0x5f: 'State',
|
|
0x64: 'CountryCode',
|
|
0x65: 'CountryName',
|
|
0x67: 'OrigTransRef',
|
|
0x69: 'Headline',
|
|
0x6e: 'Credit',
|
|
0x73: 'Source',
|
|
0x74: 'CopyrightNotice',
|
|
0x76: 'Contact',
|
|
0x78: 'Caption',
|
|
0x7a: 'WriterEditor',
|
|
0x82: 'ImageType',
|
|
0x83: 'ImageOrientation',
|
|
0x87: 'LanguageID'
|
|
|
|
// We don't record these tags:
|
|
//
|
|
// 0x00: 'RecordVersion',
|
|
// 0x7d: 'RasterizedCaption',
|
|
// 0x96: 'AudioType',
|
|
// 0x97: 'AudioSamplingRate',
|
|
// 0x98: 'AudioSamplingRes',
|
|
// 0x99: 'AudioDuration',
|
|
// 0x9a: 'AudioOutcue',
|
|
// 0xc8: 'PreviewFileFormat',
|
|
// 0xc9: 'PreviewFileFormatVer',
|
|
// 0xca: 'PreviewData'
|
|
}
|
|
|
|
loadImage.IptcMap.prototype.getText = function(id) {
|
|
var value = this.get(id)
|
|
return String(value)
|
|
}
|
|
;(function(iptcMapPrototype) {
|
|
var tags = iptcMapPrototype.tags
|
|
var map = iptcMapPrototype.map || {}
|
|
var prop
|
|
// Map the tag names to tags:
|
|
for (prop in tags) {
|
|
if (Object.prototype.hasOwnProperty.call(tags, prop)) {
|
|
map[tags[prop]] = prop
|
|
}
|
|
}
|
|
})(loadImage.IptcMap.prototype)
|
|
|
|
loadImage.IptcMap.prototype.getAll = function() {
|
|
var map = {}
|
|
var prop
|
|
var id
|
|
for (prop in this) {
|
|
if (Object.prototype.hasOwnProperty.call(this, prop)) {
|
|
id = this.tags[prop]
|
|
if (id) {
|
|
map[id] = this.getText(id)
|
|
}
|
|
}
|
|
}
|
|
return map
|
|
}
|
|
})
|