ifd_enumerate.go: Enable support for GPS 2.0.0.0

Fixes #35
for/master
Dustin Oprea 2020-05-06 01:40:20 -04:00
parent c74ff0d0b0
commit 6303a275e5
3 changed files with 68 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -28,6 +28,19 @@ var (
var (
ValidGpsVersions = [][4]byte{
// 2.0.0.0 appears to have a very similar format to 2.2.0.0, so enabling
// it under that assumption.
//
// IFD-PATH=[IFD] ID=(0x8825) NAME=[GPSTag] COUNT=(1) TYPE=[LONG] VALUE=[114]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0000) NAME=[GPSVersionID] COUNT=(4) TYPE=[BYTE] VALUE=[02 00 00 00]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0001) NAME=[GPSLatitudeRef] COUNT=(2) TYPE=[ASCII] VALUE=[S]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0002) NAME=[GPSLatitude] COUNT=(3) TYPE=[RATIONAL] VALUE=[38/1...]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0003) NAME=[GPSLongitudeRef] COUNT=(2) TYPE=[ASCII] VALUE=[E]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0004) NAME=[GPSLongitude] COUNT=(3) TYPE=[RATIONAL] VALUE=[144/1...]
// IFD-PATH=[IFD/GPSInfo] ID=(0x0012) NAME=[GPSMapDatum] COUNT=(7) TYPE=[ASCII] VALUE=[WGS-84]
//
{2, 0, 0, 0},
{2, 2, 0, 0},
// Suddenly appeared at the default in 2.31: https://home.jeita.or.jp/tsc/std-pdf/CP-3451D.pdf

View File

@ -269,6 +269,61 @@ func TestIfd_GpsInfo(t *testing.T) {
}
}
func TestIfd_GpsInfo__2_0_0_0(t *testing.T) {
defer func() {
if state := recover(); state != nil {
err := log.Wrap(state.(error))
log.PrintErrorf(err, "Test failure.")
}
}()
assetsPath := getTestAssetsPath()
filepath := path.Join(assetsPath, "gps-2200-scaled.jpg")
rawExif, err := SearchFileAndExtractExif(filepath)
log.PanicIf(err)
im := NewIfdMapping()
err = LoadStandardIfds(im)
log.PanicIf(err)
ti := NewTagIndex()
_, index, err := Collect(im, ti, rawExif)
log.PanicIf(err)
ifd, err := index.RootIfd.ChildWithIfdPath(exifcommon.IfdPathStandardGps)
log.PanicIf(err)
gi, err := ifd.GpsInfo()
log.PanicIf(err)
expectedLatitude := GpsDegrees{
Orientation: 'S',
Degrees: 38.0,
Minutes: 24.311687,
Seconds: 0.0,
}
expectedLongitude := GpsDegrees{
Orientation: 'E',
Degrees: 144.0,
Minutes: 11.33748,
Seconds: 0.0,
}
if GpsDegreesEquals(gi.Latitude, expectedLatitude) != true {
t.Fatalf("Latitude not correct: %v", gi.Latitude)
} else if GpsDegreesEquals(gi.Longitude, expectedLongitude) != true {
t.Fatalf("Longitude not correct: %v", gi.Longitude)
} else if gi.Altitude != 0 {
t.Fatalf("Altitude not correct: (%d)", gi.Altitude)
} else if gi.Timestamp.Unix() != -62135596800 {
t.Fatalf("Timestamp not correct: (%d)", gi.Timestamp.Unix())
}
}
func TestIfd_EnumerateTagsRecursively(t *testing.T) {
testImageFilepath := getTestImageFilepath()