80 lines
1.7 KiB
JavaScript
80 lines
1.7 KiB
JavaScript
var exif = require('./exif');
|
|
var date = require('./date');
|
|
|
|
var degreeTags = [{
|
|
section: exif.GPSIFD,
|
|
type: 0x0002,
|
|
name: 'GPSLatitude',
|
|
refType: 0x0001,
|
|
refName: 'GPSLatitudeRef',
|
|
posVal: 'N'
|
|
},
|
|
{
|
|
section: exif.GPSIFD,
|
|
type: 0x0004,
|
|
name: 'GPSLongitude',
|
|
refType: 0x0003,
|
|
refName: 'GPSLongitudeRef',
|
|
posVal: 'E'
|
|
}];
|
|
var dateTags = [{
|
|
section: exif.SubIFD,
|
|
type: 0x0132,
|
|
name: 'ModifyDate'
|
|
},
|
|
{
|
|
section: exif.SubIFD,
|
|
type: 0x9003,
|
|
name: 'DateTimeOriginal'
|
|
},
|
|
{
|
|
section: exif.SubIFD,
|
|
type: 0x9004,
|
|
name: 'CreateDate'
|
|
},
|
|
{
|
|
section: exif.SubIFD,
|
|
type: 0x0132,
|
|
name : 'ModifyDate',
|
|
}];
|
|
|
|
module.exports = {
|
|
castDegreeValues: function(getTagValue, setTagValue) {
|
|
degreeTags.forEach(function(t) {
|
|
var degreeVal = getTagValue(t);
|
|
if(degreeVal) {
|
|
var degreeRef = getTagValue({section: t.section, type: t.refType, name: t.refName});
|
|
var degreeNumRef = degreeRef === t.posVal ? 1 : -1;
|
|
var degree = (degreeVal[0] + (degreeVal[1] / 60) + (degreeVal[2] / 3600)) * degreeNumRef;
|
|
setTagValue(t, degree);
|
|
}
|
|
});
|
|
},
|
|
castDateValues: function(getTagValue, setTagValue) {
|
|
dateTags.forEach(function(t) {
|
|
var dateStrVal = getTagValue(t);
|
|
if(dateStrVal) {
|
|
//some easy checks to determine two common date formats
|
|
var timestamp = date.parseExifDate(dateStrVal);
|
|
if(typeof timestamp !== 'undefined') {
|
|
setTagValue(t, timestamp);
|
|
}
|
|
}
|
|
});
|
|
},
|
|
simplifyValue: function(values, format) {
|
|
if(Array.isArray(values)) {
|
|
values = values.map(function(value) {
|
|
if(format === 10 || format === 5) {
|
|
return value[0] / value[1];
|
|
}
|
|
return value;
|
|
});
|
|
if(values.length === 1) {
|
|
values = values[0];
|
|
}
|
|
}
|
|
return values;
|
|
}
|
|
};
|