diff options
Diffstat (limited to 'vendor/github.com/rwcarlsen/goexif')
69 files changed, 3264 insertions, 0 deletions
diff --git a/vendor/github.com/rwcarlsen/goexif/.gitignore b/vendor/github.com/rwcarlsen/goexif/.gitignore new file mode 100644 index 000000000..3866bbf31 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/.gitignore @@ -0,0 +1,23 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so +*.sw* + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe diff --git a/vendor/github.com/rwcarlsen/goexif/README.md b/vendor/github.com/rwcarlsen/goexif/README.md new file mode 100644 index 000000000..8b815a0fd --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/README.md @@ -0,0 +1,71 @@ +goexif +====== + +Provides decoding of basic exif and tiff encoded data. Still in alpha - no guarantees. +Suggestions and pull requests are welcome. Functionality is split into two packages - "exif" and "tiff" +The exif package depends on the tiff package. +Documentation can be found at http://godoc.org/github.com/rwcarlsen/goexif + +Like goexif? - Bitcoin tips welcome: 17M7LFh3ETz4bz83VikB7xuGQskt8K5Lj4 + +To install, in a terminal type: + +``` +go get github.com/rwcarlsen/goexif/exif +``` + +Or if you just want the tiff package: + +``` +go get github.com/rwcarlsen/goexif/tiff +``` + +Example usage: + +```go +package main + +import ( + "fmt" + "log" + "os" + + "github.com/rwcarlsen/goexif/exif" + "github.com/rwcarlsen/goexif/mknote" +) + +func ExampleDecode() { + fname := "sample1.jpg" + + f, err := os.Open(fname) + if err != nil { + log.Fatal(err) + } + + // Optionally register camera makenote data parsing - currently Nikon and + // Canon are supported. + exif.RegisterParsers(mknote.All...) + + x, err := exif.Decode(f) + if err != nil { + log.Fatal(err) + } + + camModel, _ := x.Get(exif.Model) // normally, don't ignore errors! + fmt.Println(camModel.StringVal()) + + focal, _ := x.Get(exif.FocalLength) + numer, denom, _ := focal.Rat2(0) // retrieve first (only) rat. value + fmt.Printf("%v/%v", numer, denom) + + // Two convenience functions exist for date/time taken and GPS coords: + tm, _ := x.DateTime() + fmt.Println("Taken: ", tm) + + lat, long, _ := x.LatLong() + fmt.Println("lat, long: ", lat, ", ", long) +} +``` + +<!--golang--> +[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/5e166f74cdb82b999ccd84e3c4dc4348 "githalytics.com")](http://githalytics.com/rwcarlsen/goexif) diff --git a/vendor/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg Binary files differnew file mode 100644 index 000000000..ffb31743d --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/huge_tag_exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/corrupt/infinite_loop_exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/infinite_loop_exif.jpg Binary files differnew file mode 100644 index 000000000..6b0994713 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/infinite_loop_exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg Binary files differnew file mode 100644 index 000000000..2a51b0ba0 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/corrupt/max_uint32_exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/example_test.go b/vendor/github.com/rwcarlsen/goexif/exif/example_test.go new file mode 100644 index 000000000..45fd5d4ad --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/example_test.go @@ -0,0 +1,42 @@ +package exif_test + +import ( + "fmt" + "log" + "os" + + "github.com/rwcarlsen/goexif/exif" + "github.com/rwcarlsen/goexif/mknote" +) + +func ExampleDecode() { + fname := "sample1.jpg" + + f, err := os.Open(fname) + if err != nil { + log.Fatal(err) + } + + // Optionally register camera makenote data parsing - currently Nikon and + // Canon are supported. + exif.RegisterParsers(mknote.All...) + + x, err := exif.Decode(f) + if err != nil { + log.Fatal(err) + } + + camModel, _ := x.Get(exif.Model) // normally, don't ignore errors! + fmt.Println(camModel.StringVal()) + + focal, _ := x.Get(exif.FocalLength) + numer, denom, _ := focal.Rat2(0) // retrieve first (only) rat. value + fmt.Printf("%v/%v", numer, denom) + + // Two convenience functions exist for date/time taken and GPS coords: + tm, _ := x.DateTime() + fmt.Println("Taken: ", tm) + + lat, long, _ := x.LatLong() + fmt.Println("lat, long: ", lat, ", ", long) +} diff --git a/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go b/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go new file mode 100644 index 000000000..c53f1ddda --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go @@ -0,0 +1,202 @@ +package exif + +//go:generate go run regen_regress.go -- regress_expected_test.go +//go:generate go fmt regress_expected_test.go + +import ( + "flag" + "fmt" + "math" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/rwcarlsen/goexif/tiff" +) + +var dataDir = flag.String("test_data_dir", ".", "Directory where the data files for testing are located") + +func TestDecode(t *testing.T) { + fpath := filepath.Join(*dataDir, "samples") + f, err := os.Open(fpath) + if err != nil { + t.Fatalf("Could not open sample directory '%s': %v", fpath, err) + } + + names, err := f.Readdirnames(0) + if err != nil { + t.Fatalf("Could not read sample directory '%s': %v", fpath, err) + } + + cnt := 0 + for _, name := range names { + if !strings.HasSuffix(name, ".jpg") { + t.Logf("skipping non .jpg file %v", name) + continue + } + t.Logf("testing file %v", name) + f, err := os.Open(filepath.Join(fpath, name)) + if err != nil { + t.Fatal(err) + } + + x, err := Decode(f) + if err != nil { + t.Fatal(err) + } else if x == nil { + t.Fatalf("No error and yet %v was not decoded", name) + } + + t.Logf("checking pic %v", name) + x.Walk(&walker{name, t}) + cnt++ + } + if cnt != len(regressExpected) { + t.Errorf("Did not process enough samples, got %d, want %d", cnt, len(regressExpected)) + } +} + +type walker struct { + picName string + t *testing.T +} + +func (w *walker) Walk(field FieldName, tag *tiff.Tag) error { + // this needs to be commented out when regenerating regress expected vals + pic := regressExpected[w.picName] + if pic == nil { + w.t.Errorf(" regression data not found") + return nil + } + + exp, ok := pic[field] + if !ok { + w.t.Errorf(" regression data does not have field %v", field) + return nil + } + + s := tag.String() + if tag.Count == 1 && s != "\"\"" { + s = fmt.Sprintf("[%s]", s) + } + got := tag.String() + + if exp != got { + fmt.Println("s: ", s) + fmt.Printf("len(s)=%v\n", len(s)) + w.t.Errorf(" field %v bad tag: expected '%s', got '%s'", field, exp, got) + } + return nil +} + +func TestMarshal(t *testing.T) { + name := filepath.Join(*dataDir, "sample1.jpg") + f, err := os.Open(name) + if err != nil { + t.Fatalf("%v\n", err) + } + defer f.Close() + + x, err := Decode(f) + if err != nil { + t.Fatal(err) + } + if x == nil { + t.Fatal("bad err") + } + + b, err := x.MarshalJSON() + if err != nil { + t.Fatal(err) + } + + t.Logf("%s", b) +} + +func testSingleParseDegreesString(t *testing.T, s string, w float64) { + g, err := parseTagDegreesString(s) + if err != nil { + t.Fatal(err) + } + if math.Abs(w-g) > 1e-10 { + t.Errorf("Wrong parsing result %s: Want %.12f, got %.12f", s, w, g) + } +} + +func TestParseTagDegreesString(t *testing.T) { + // semicolon as decimal mark + testSingleParseDegreesString(t, "52,00000,50,00000,34,01180", 52.842781055556) // comma as separator + testSingleParseDegreesString(t, "52,00000;50,00000;34,01180", 52.842781055556) // semicolon as separator + + // point as decimal mark + testSingleParseDegreesString(t, "14.00000,44.00000,34.01180", 14.742781055556) // comma as separator + testSingleParseDegreesString(t, "14.00000;44.00000;34.01180", 14.742781055556) // semicolon as separator + testSingleParseDegreesString(t, "14.00000;44.00000,34.01180", 14.742781055556) // mixed separators + + testSingleParseDegreesString(t, "-008.0,30.0,03.6", -8.501) // leading zeros + + // no decimal places + testSingleParseDegreesString(t, "-10,15,54", -10.265) + testSingleParseDegreesString(t, "-10;15;54", -10.265) + + // incorrect mix of comma and point as decimal mark + s := "-17,00000,15.00000,04.80000" + if _, err := parseTagDegreesString(s); err == nil { + t.Error("parseTagDegreesString: false positive for " + s) + } +} + +// Make sure we error out early when a tag had a count of MaxUint32 +func TestMaxUint32CountError(t *testing.T) { + name := filepath.Join(*dataDir, "corrupt/max_uint32_exif.jpg") + f, err := os.Open(name) + if err != nil { + t.Fatalf("%v\n", err) + } + defer f.Close() + + _, err = Decode(f) + if err == nil { + t.Fatal("no error on bad exif data") + } + if !strings.Contains(err.Error(), "invalid Count offset") { + t.Fatal("wrong error:", err.Error()) + } +} + +// Make sure we error out early with tag data sizes larger than the image file +func TestHugeTagError(t *testing.T) { + name := filepath.Join(*dataDir, "corrupt/huge_tag_exif.jpg") + f, err := os.Open(name) + if err != nil { + t.Fatalf("%v\n", err) + } + defer f.Close() + + _, err = Decode(f) + if err == nil { + t.Fatal("no error on bad exif data") + } + if !strings.Contains(err.Error(), "short read") { + t.Fatal("wrong error:", err.Error()) + } +} + +// Check for a 0-length tag value +func TestZeroLengthTagError(t *testing.T) { + name := filepath.Join(*dataDir, "corrupt/infinite_loop_exif.jpg") + f, err := os.Open(name) + if err != nil { + t.Fatalf("%v\n", err) + } + defer f.Close() + + _, err = Decode(f) + if err == nil { + t.Fatal("no error on bad exif data") + } + if !strings.Contains(err.Error(), "zero length tag value") { + t.Fatal("wrong error:", err.Error()) + } +} diff --git a/vendor/github.com/rwcarlsen/goexif/exif/regress_expected_test.go b/vendor/github.com/rwcarlsen/goexif/exif/regress_expected_test.go new file mode 100644 index 000000000..bf3998189 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/regress_expected_test.go @@ -0,0 +1,2293 @@ +package exif + +var regressExpected = map[string]map[FieldName]string{ + "2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg": map[FieldName]string{ + PixelXDimension: `1600`, + InteroperabilityIFDPointer: `1009`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + Make: `"Samsung Techwin"`, + DateTimeOriginal: `"2004:01:11 22:45:15"`, + DateTimeDigitized: `"2004:01:11 22:45:15"`, + ImageDescription: `"SAMSUNG DIGITAL CAMERA "`, + ExifVersion: `"0220"`, + MeteringMode: `2`, + Flash: `1`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + FlashpixVersion: `"0100"`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `1039`, + MaxApertureValue: `"32/10"`, + ExposureProgram: `2`, + Software: `"M5011S-1031"`, + DateTime: `"2004:01:11 22:45:19"`, + FNumber: `"320/100"`, + ISOSpeedRatings: `150`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"2/1"`, + RelatedSoundFile: `""`, + XResolution: `"72/1"`, + ExifIFDPointer: `251`, + ExposureTime: `"1000/30000"`, + LightSource: `0`, + FocalLength: `"82/11"`, + ColorSpace: `1`, + PixelYDimension: `1200`, + FileSource: `""`, + Model: `"U-CA 501"`, + ThumbJPEGInterchangeFormatLength: `3530`, + ExposureBiasValue: `"95/10"`, + }, + "2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `5108`, + ThumbJPEGInterchangeFormatLength: `4323`, + MaxApertureValue: `"95/32"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `196`, + ExposureTime: `"1/1500"`, + InteroperabilityIndex: `"R98"`, + FocalPlaneXResolution: `"2816000/225"`, + YResolution: `"180/1"`, + DateTime: `"2006:08:03 16:29:38"`, + ShutterSpeedValue: `"338/32"`, + ApertureValue: `"95/32"`, + FocalLength: `"5800/1000"`, + FlashpixVersion: `"0100"`, + Make: `"Canon"`, + DateTimeOriginal: `"2006:08:03 16:29:38"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `2824`, + ExposureMode: `0`, + SceneCaptureType: `0`, + FNumber: `"28/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + SensingMethod: `2`, + DateTimeDigitized: `"2006:08:03 16:29:38"`, + CompressedBitsPerPixel: `"5/1"`, + MeteringMode: `5`, + MakerNote: `""`, + UserComment: `""`, + PixelXDimension: `2816`, + Model: `"Canon PowerShot SD600"`, + ExposureBiasValue: `"0/3"`, + PixelYDimension: `2112`, + FocalPlaneResolutionUnit: `2`, + DigitalZoomRatio: `"2816/2816"`, + Orientation: `6`, + XResolution: `"180/1"`, + ExifVersion: `"0220"`, + Flash: `24`, + FocalPlaneYResolution: `"2112000/169"`, + CustomRendered: `0`, + }, + "2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg": map[FieldName]string{ + FNumber: `"28/10"`, + ExposureProgram: `2`, + Software: `"E3200v1.1"`, + DateTime: `"2006:11:11 19:17:56"`, + ExposureTime: `"10/601"`, + ISOSpeedRatings: `50`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"4/1"`, + Saturation: `0`, + XResolution: `"300/1"`, + ExifIFDPointer: `284`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + FocalLength: `"58/10"`, + ColorSpace: `1`, + PixelYDimension: `1536`, + FileSource: `""`, + Model: `"E3200"`, + ThumbJPEGInterchangeFormatLength: `4546`, + DateTimeDigitized: `"2006:11:11 19:17:56"`, + PixelXDimension: `2048`, + InteroperabilityIFDPointer: `1026`, + SceneType: `""`, + DigitalZoomRatio: `"0/100"`, + GainControl: `0`, + Make: `"NIKON"`, + DateTimeOriginal: `"2006:11:11 19:17:56"`, + InteroperabilityIndex: `"R98"`, + ImageDescription: `" "`, + Sharpness: `0`, + YCbCrPositioning: `2`, + ExifVersion: `"0220"`, + MeteringMode: `5`, + Flash: `25`, + FocalLengthIn35mmFilm: `38`, + SubjectDistanceRange: `0`, + Orientation: `1`, + ResolutionUnit: `2`, + MaxApertureValue: `"30/10"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + YResolution: `"300/1"`, + ThumbJPEGInterchangeFormat: `4596`, + CustomRendered: `1`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Contrast: `0`, + MakerNote: `""`, + UserComment: `" "`, + }, + "2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg": map[FieldName]string{ + Model: `"Canon PowerShot A80"`, + ExposureBiasValue: `"0/3"`, + PixelYDimension: `1704`, + FocalPlaneResolutionUnit: `2`, + FocalPlaneYResolution: `"1704000/210"`, + CustomRendered: `0`, + DigitalZoomRatio: `"2272/2272"`, + Orientation: `1`, + XResolution: `"180/1"`, + ExifVersion: `"0220"`, + Flash: `24`, + ThumbJPEGInterchangeFormat: `2036`, + ThumbJPEGInterchangeFormatLength: `6465`, + MaxApertureValue: `"95/32"`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `196`, + ExposureTime: `"1/80"`, + FocalLength: `"250/32"`, + FlashpixVersion: `"0100"`, + FocalPlaneXResolution: `"2272000/280"`, + YResolution: `"180/1"`, + DateTime: `"2006:12:10 23:58:20"`, + ShutterSpeedValue: `"202/32"`, + ApertureValue: `"95/32"`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Make: `"Canon"`, + DateTimeOriginal: `"2006:12:10 23:58:20"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1844`, + FNumber: `"28/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + UserComment: `""`, + PixelXDimension: `2272`, + SensingMethod: `2`, + DateTimeDigitized: `"2006:12:10 23:58:20"`, + CompressedBitsPerPixel: `"3/1"`, + MeteringMode: `5`, + MakerNote: `""`, + }, + "2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg": map[FieldName]string{ + WhiteBalance: `0`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormatLength: `7063`, + ExposureBiasValue: `"0/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1536`, + ExposureMode: `0`, + InteroperabilityIndex: `"R98"`, + Make: `"PENTAX Corporation"`, + DateTimeDigitized: `"2006:12:17 07:09:14"`, + PixelXDimension: `2048`, + InteroperabilityIFDPointer: `31048`, + CustomRendered: `0`, + DateTime: `"2006:12:17 07:09:14"`, + ExposureProgram: `2`, + FocalLengthIn35mmFilm: `38`, + Saturation: `0`, + XResolution: `"72/1"`, + ISOSpeedRatings: `64`, + ExifVersion: `"0220"`, + CompressedBitsPerPixel: `"5725504/3145728"`, + Flash: `24`, + Model: `"PENTAX Optio S6"`, + ThumbJPEGInterchangeFormat: `31172`, + MaxApertureValue: `"27/10"`, + FocalLength: `"62/10"`, + ColorSpace: `1`, + DateTimeOriginal: `"2006:12:17 07:09:14"`, + MakerNote: `""`, + DigitalZoomRatio: `"100/100"`, + SceneCaptureType: `0`, + Contrast: `0`, + Software: `"Optio S6 Ver 1.00"`, + FNumber: `"270/100"`, + Sharpness: `0`, + ComponentsConfiguration: `""`, + MeteringMode: `5`, + SubjectDistanceRange: `2`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `586`, + ExposureTime: `"1/160"`, + }, + "2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg": map[FieldName]string{ + DateTimeDigitized: `"2006:12:21 15:55:26"`, + CompressedBitsPerPixel: `"8/1"`, + MeteringMode: `3`, + MakerNote: `""`, + PixelXDimension: `2592`, + Saturation: `0`, + ImageDescription: `" "`, + Model: `"DSC-W15"`, + ExposureBiasValue: `"-20/10"`, + PixelYDimension: `1944`, + Orientation: `1`, + XResolution: `"72/1"`, + ISOSpeedRatings: `100`, + ExifVersion: `"0220"`, + Flash: `79`, + CustomRendered: `0`, + ThumbJPEGInterchangeFormat: `2484`, + ThumbJPEGInterchangeFormatLength: `13571`, + ExposureProgram: `2`, + MaxApertureValue: `"48/16"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `256`, + ExposureTime: `"10/400"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + YResolution: `"72/1"`, + DateTime: `"2006:12:21 15:55:26"`, + LightSource: `0`, + FocalLength: `"79/10"`, + FlashpixVersion: `"0100"`, + Contrast: `0`, + Make: `"SONY"`, + DateTimeOriginal: `"2006:12:21 15:55:26"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `2278`, + ExposureMode: `1`, + SceneCaptureType: `0`, + FNumber: `"28/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + }, + "2007-01-01-12-00-00-sep-2007-01-01-12-00-00a.jpg": map[FieldName]string{ + MaxApertureValue: `"286/100"`, + ExposureIndex: `"200/1"`, + ThumbJPEGInterchangeFormat: `13848`, + ThumbJPEGInterchangeFormatLength: `3436`, + ExposureProgram: `2`, + ExposureTime: `"8942/1000000"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `340`, + ApertureValue: `"286/100"`, + LightSource: `0`, + FocalLength: `"60/10"`, + FlashpixVersion: `"0100"`, + YResolution: `"480/1"`, + Software: `"KODAK EASYSHARE C713 ZOOM DIGITAL CAMERA"`, + ShutterSpeedValue: `"680/100"`, + InteroperabilityIFDPointer: `13816`, + ExposureMode: `0`, + FocalLengthIn35mmFilm: `36`, + SceneCaptureType: `0`, + Contrast: `0`, + Make: `"EASTMAN KODAK COMPANY"`, + DateTimeOriginal: `"2007:01:01 12:00:00"`, + ComponentsConfiguration: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + FNumber: `"270/100"`, + ColorSpace: `1`, + FileSource: `""`, + PixelXDimension: `1280`, + SensingMethod: `2`, + GainControl: `2`, + Saturation: `0`, + SubjectDistanceRange: `0`, + DateTimeDigitized: `"2007:01:01 12:00:00"`, + MeteringMode: `5`, + MakerNote: `""`, + Model: `"KODAK EASYSHARE C713 ZOOM DIGITAL CAMERA"`, + ExposureBiasValue: `"0/10"`, + PixelYDimension: `960`, + ExifVersion: `"0221"`, + Flash: `25`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/10"`, + Orientation: `1`, + XResolution: `"480/1"`, + ISOSpeedRatings: `200`, + }, + "2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg": map[FieldName]string{ + XResolution: `"180/1"`, + ISOSpeedRatings: `50`, + ExifVersion: `"0220"`, + Flash: `24`, + CustomRendered: `0`, + Orientation: `1`, + ThumbJPEGInterchangeFormatLength: `7024`, + ExposureProgram: `2`, + MaxApertureValue: `"297/100"`, + ThumbJPEGInterchangeFormat: `956`, + YCbCrPositioning: `2`, + ExifIFDPointer: `266`, + ExposureTime: `"1/30"`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + Software: `"1.00.018PR "`, + DateTime: `"2007:01:17 21:49:44"`, + ShutterSpeedValue: `"491/100"`, + ApertureValue: `"33/10"`, + LightSource: `0`, + FocalLength: `"73/10"`, + FlashpixVersion: `"0100"`, + YResolution: `"180/1"`, + DateTimeOriginal: `"2007:01:17 21:49:44"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `832`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Make: `"Digital Camera "`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + FNumber: `"33/10"`, + MeteringMode: `2`, + MakerNote: `"6106789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"`, + PixelXDimension: `2816`, + SensingMethod: `2`, + DateTimeDigitized: `"2007:01:17 21:49:44"`, + Model: `"6MP-9Y8 "`, + ExposureBiasValue: `"0/10"`, + PixelYDimension: `2112`, + ImageDescription: `"Digital image "`, + }, + "2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg": map[FieldName]string{ + Software: `"Optio S5z Ver 1.00 "`, + FNumber: `"26/10"`, + Sharpness: `0`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `586`, + ExposureTime: `"1/60"`, + ComponentsConfiguration: `""`, + MeteringMode: `5`, + SubjectDistanceRange: `2`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormatLength: `8800`, + ExposureBiasValue: `"0/3"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1920`, + WhiteBalance: `0`, + Make: `"PENTAX Corporation "`, + DateTimeDigitized: `"2007:02:02 18:13:29"`, + PixelXDimension: `2560`, + InteroperabilityIFDPointer: `30974`, + CustomRendered: `0`, + ExposureMode: `0`, + InteroperabilityIndex: `"R98"`, + DateTime: `"2007:02:02 18:13:29"`, + ExposureProgram: `2`, + XResolution: `"72/1"`, + ISOSpeedRatings: `200`, + ExifVersion: `"0220"`, + CompressedBitsPerPixel: `"27033600/4915200"`, + Flash: `25`, + FocalLengthIn35mmFilm: `35`, + Saturation: `0`, + Model: `"PENTAX Optio S5z "`, + ThumbJPEGInterchangeFormat: `31098`, + MaxApertureValue: `"28/10"`, + FocalLength: `"580/100"`, + ColorSpace: `1`, + DateTimeOriginal: `"2007:02:02 18:13:29"`, + MakerNote: `""`, + DigitalZoomRatio: `"0/0"`, + SceneCaptureType: `0`, + Contrast: `0`, + }, + "2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg": map[FieldName]string{ + UserComment: `""`, + PixelXDimension: `1600`, + SensingMethod: `2`, + DateTimeDigitized: `"2007:05:02 17:02:21"`, + CompressedBitsPerPixel: `"3/1"`, + MeteringMode: `5`, + MakerNote: `""`, + Model: `"Canon IXY DIGITAL 55"`, + ExposureBiasValue: `"0/3"`, + PixelYDimension: `1200`, + FocalPlaneResolutionUnit: `2`, + FocalPlaneYResolution: `"1200000/168"`, + CustomRendered: `0`, + DigitalZoomRatio: `"2592/2592"`, + Orientation: `1`, + XResolution: `"180/1"`, + ExifVersion: `"0220"`, + Flash: `9`, + ThumbJPEGInterchangeFormat: `5108`, + ThumbJPEGInterchangeFormatLength: `6306`, + MaxApertureValue: `"107/32"`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `196`, + ExposureTime: `"1/60"`, + FocalLength: `"7109/1000"`, + FlashpixVersion: `"0100"`, + FocalPlaneXResolution: `"1600000/225"`, + YResolution: `"180/1"`, + DateTime: `"2007:05:02 17:02:21"`, + ShutterSpeedValue: `"189/32"`, + ApertureValue: `"107/32"`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Make: `"Canon"`, + DateTimeOriginal: `"2007:05:02 17:02:21"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `2226`, + FNumber: `"32/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + }, + "2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg": map[FieldName]string{ + Model: `"EX-Z70 "`, + ExposureBiasValue: `"0/3"`, + PixelYDimension: `480`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/0"`, + Orientation: `1`, + XResolution: `"72/1"`, + ExifVersion: `"0221"`, + Flash: `16`, + ThumbJPEGInterchangeFormat: `27422`, + ThumbJPEGInterchangeFormatLength: `8332`, + ExposureProgram: `2`, + MaxApertureValue: `"33/10"`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `282`, + ExposureTime: `"1/50"`, + FocalLength: `"630/100"`, + FlashpixVersion: `"0100"`, + YResolution: `"72/1"`, + Software: `"1.00 "`, + DateTime: `"2007:06:17 22:56:38"`, + LightSource: `0`, + ExposureMode: `0`, + FocalLengthIn35mmFilm: `38`, + SceneCaptureType: `0`, + Contrast: `0`, + Make: `"CASIO COMPUTER CO.,LTD."`, + DateTimeOriginal: `"2007:05:12 08:19:07"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `27298`, + Sharpness: `0`, + FNumber: `"31/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + PixelXDimension: `640`, + GainControl: `2`, + Saturation: `0`, + DateTimeDigitized: `"2007:06:17 22:56:38"`, + CompressedBitsPerPixel: `"252746/307200"`, + MeteringMode: `5`, + MakerNote: `""`, + }, + "2007-05-26-04-49-45-sep-2007-05-26-04-49-45a.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `4596`, + ThumbJPEGInterchangeFormatLength: `10120`, + ExposureProgram: `2`, + MaxApertureValue: `"34/10"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `284`, + ExposureTime: `"10/3486"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + YResolution: `"300/1"`, + Software: `"COOLPIX L3v1.2"`, + DateTime: `"2007:05:26 04:49:45"`, + LightSource: `0`, + FocalLength: `"63/10"`, + FlashpixVersion: `"0100"`, + Contrast: `0`, + Make: `"NIKON"`, + DateTimeOriginal: `"2007:05:26 04:49:45"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1026`, + ExposureMode: `0`, + FocalLengthIn35mmFilm: `38`, + SceneCaptureType: `2`, + FNumber: `"32/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + Saturation: `0`, + DateTimeDigitized: `"2007:05:26 04:49:45"`, + CompressedBitsPerPixel: `"4/1"`, + MeteringMode: `5`, + MakerNote: `""`, + UserComment: `" "`, + PixelXDimension: `2592`, + GainControl: `0`, + SubjectDistanceRange: `0`, + ImageDescription: `" "`, + Model: `"COOLPIX L3"`, + ExposureBiasValue: `"0/10"`, + PixelYDimension: `1944`, + Orientation: `1`, + XResolution: `"300/1"`, + ISOSpeedRatings: `50`, + ExifVersion: `"0220"`, + Flash: `24`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/100"`, + }, + "2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg": map[FieldName]string{ + CompressedBitsPerPixel: `"2/1"`, + MeteringMode: `5`, + UserComment: `" "`, + GainControl: `1`, + Saturation: `0`, + SubjectDistanceRange: `0`, + ExifIFDPointer: `284`, + ExposureTime: `"10/40"`, + InteroperabilityIndex: `"R98"`, + Software: `"COOLPIX S6V1.0"`, + ImageDescription: `" "`, + Model: `"COOLPIX S6"`, + XResolution: `"300/1"`, + ISOSpeedRatings: `53`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1026`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/100"`, + Make: `"NIKON"`, + Orientation: `1`, + Contrast: `0`, + FocalLengthIn35mmFilm: `35`, + SceneCaptureType: `0`, + FileSource: `""`, + FNumber: `"30/10"`, + ExposureProgram: `2`, + DateTimeDigitized: `"2007:05:30 14:28:01"`, + MakerNote: `""`, + PixelXDimension: `2816`, + SceneType: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + FocalLength: `"58/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2112`, + YResolution: `"300/1"`, + DateTime: `"2007:05:30 14:28:01"`, + Flash: `16`, + ExposureMode: `0`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2007:05:30 14:28:01"`, + MaxApertureValue: `"32/10"`, + ColorSpace: `1`, + WhiteBalance: `0`, + Sharpness: `0`, + ThumbJPEGInterchangeFormat: `4596`, + ThumbJPEGInterchangeFormatLength: `5274`, + }, + "2007-06-06-16-15-25-sep-2007-06-06-16-15-25a.jpg": map[FieldName]string{ + ExifVersion: `"0220"`, + DateTimeOriginal: `"2007:06:06 16:15:25"`, + Flash: `24`, + ExposureMode: `0`, + ThumbJPEGInterchangeFormat: `4596`, + ThumbJPEGInterchangeFormatLength: `5967`, + MaxApertureValue: `"30/10"`, + ColorSpace: `1`, + WhiteBalance: `0`, + Sharpness: `0`, + ExifIFDPointer: `284`, + ExposureTime: `"10/2870"`, + CompressedBitsPerPixel: `"2/1"`, + MeteringMode: `5`, + UserComment: `" "`, + GainControl: `0`, + Saturation: `0`, + SubjectDistanceRange: `0`, + InteroperabilityIndex: `"R98"`, + ImageDescription: `" "`, + Model: `"E3700"`, + Software: `"E3700v1.2"`, + Make: `"NIKON"`, + Orientation: `1`, + XResolution: `"300/1"`, + ISOSpeedRatings: `50`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1026`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/100"`, + FocalLengthIn35mmFilm: `35`, + SceneCaptureType: `0`, + Contrast: `0`, + FNumber: `"48/10"`, + ExposureProgram: `2`, + FileSource: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + DateTimeDigitized: `"2007:06:06 16:15:25"`, + MakerNote: `""`, + PixelXDimension: `2048`, + SceneType: `""`, + YResolution: `"300/1"`, + DateTime: `"2007:06:06 16:15:25"`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + FocalLength: `"54/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1536`, + }, + "2007-06-26-10-13-04-sep-2007-06-26-10-13-04a.jpg": map[FieldName]string{ + ColorSpace: `1`, + FileSource: `""`, + FNumber: `"3/1"`, + CompressedBitsPerPixel: `"6389872/3145728"`, + MeteringMode: `2`, + MakerNote: `""`, + PixelXDimension: `2048`, + SensingMethod: `2`, + DateTimeDigitized: `"2007:06:26 10:13:04"`, + Model: `"DV"`, + Copyright: `"Copyright2004"`, + ExposureBiasValue: `"1/4"`, + PixelYDimension: `1536`, + ImageDescription: `"My beautiful picture"`, + XResolution: `"320/1"`, + ISOSpeedRatings: `100`, + ExifVersion: `"0210"`, + Flash: `0`, + Orientation: `1`, + ThumbJPEGInterchangeFormatLength: `6292`, + ExposureProgram: `3`, + MaxApertureValue: `"3/1"`, + ExposureIndex: `"146/1"`, + ThumbJPEGInterchangeFormat: `1306`, + YCbCrPositioning: `2`, + ExposureTime: `"23697424/268435456"`, + ExifIFDPointer: `262`, + RelatedSoundFile: `"RelatedSound"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + Software: `"DVWare 1.0"`, + DateTime: `"2007:06:26 10:13:04"`, + ShutterSpeedValue: `"7/1"`, + ApertureValue: `"3/1"`, + LightSource: `0`, + FlashpixVersion: `"0100"`, + YResolution: `"384/1"`, + DateTimeOriginal: `"2007:06:26 10:13:04"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1170`, + Make: `"CEC"`, + }, + "2007-07-13-17-02-30-sep-2007-07-13-17-02-30a.jpg": map[FieldName]string{ + Software: `"Ver 1.00 "`, + DateTime: `"2007:07:13 17:02:30"`, + FNumber: `"48/10"`, + ExposureProgram: `2`, + RelatedSoundFile: `" "`, + Saturation: `0`, + XResolution: `"72/1"`, + ExifIFDPointer: `266`, + ExposureTime: `"1/110"`, + ISOSpeedRatings: `64`, + ComponentsConfiguration: `""`, + ColorSpace: `1`, + PixelYDimension: `2736`, + FileSource: `""`, + Model: `"ViviCam X30 "`, + ThumbJPEGInterchangeFormatLength: `20544`, + ShutterSpeedValue: `"678/100"`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + DigitalZoomRatio: `"100/100"`, + GainControl: `0`, + InteroperabilityIndex: `"R98"`, + Make: `"Vivitar"`, + DateTimeOriginal: `"2007:07:13 17:02:30"`, + DateTimeDigitized: `"2007:07:13 17:02:30"`, + PixelXDimension: `3648`, + InteroperabilityIFDPointer: `1010`, + ImageDescription: `"Digital StillCamera"`, + Sharpness: `0`, + Flash: `0`, + FocalLengthIn35mmFilm: `35`, + SubjectDistanceRange: `0`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifVersion: `"0220"`, + MeteringMode: `2`, + WhiteBalance: `0`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `1156`, + ApertureValue: `"45/10"`, + MaxApertureValue: `"30/10"`, + FlashpixVersion: `"0100"`, + MakerNote: `""`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Contrast: `0`, + }, + "2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg": map[FieldName]string{ + Model: `"KODAK C663 ZOOM DIGITAL CAMERA"`, + ShutterSpeedValue: `"73/10"`, + DigitalZoomRatio: `"0/100"`, + FocalLengthIn35mmFilm: `66`, + SceneCaptureType: `0`, + Contrast: `0`, + Make: `"EASTMAN KODAK COMPANY"`, + Orientation: `1`, + XResolution: `"230/1"`, + CustomRendered: `0`, + ISOSpeedRatings: `80`, + ComponentsConfiguration: `""`, + FNumber: `"36/10"`, + ExposureProgram: `2`, + FileSource: `""`, + PixelXDimension: `2832`, + SensingMethod: `2`, + SceneType: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + DateTimeDigitized: `"2007:08:15 14:42:46"`, + MakerNote: `""`, + FocalLength: `"110/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2128`, + YResolution: `"230/1"`, + ApertureValue: `"37/10"`, + ExposureBiasValue: `"0/3"`, + LightSource: `0`, + ExposureMode: `0`, + ExifVersion: `"0221"`, + DateTimeOriginal: `"2007:08:15 14:42:46"`, + Flash: `24`, + MaxApertureValue: `"37/10"`, + ColorSpace: `1`, + ExposureIndex: `"80/1"`, + WhiteBalance: `0`, + Sharpness: `0`, + ThumbJPEGInterchangeFormat: `8472`, + ThumbJPEGInterchangeFormatLength: `3060`, + ExposureTime: `"1/160"`, + MeteringMode: `5`, + ExifIFDPointer: `320`, + GainControl: `0`, + Saturation: `0`, + SubjectDistanceRange: `0`, + }, + "2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `5108`, + ThumbJPEGInterchangeFormatLength: `2084`, + MaxApertureValue: `"147/32"`, + ColorSpace: `1`, + WhiteBalance: `0`, + ExifIFDPointer: `196`, + ExposureTime: `"1/400"`, + CompressedBitsPerPixel: `"5/1"`, + MeteringMode: `5`, + UserComment: `""`, + InteroperabilityIndex: `"R98"`, + Model: `"Canon PowerShot SD450"`, + ShutterSpeedValue: `"277/32"`, + FocalPlaneResolutionUnit: `2`, + DigitalZoomRatio: `"2592/2592"`, + Make: `"Canon"`, + Orientation: `1`, + XResolution: `"180/1"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `2206`, + FocalPlaneYResolution: `"1944000/168"`, + CustomRendered: `0`, + SceneCaptureType: `0`, + FNumber: `"100/10"`, + FileSource: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + DateTimeDigitized: `"2007:08:24 02:40:42"`, + MakerNote: `""`, + PixelXDimension: `2592`, + SensingMethod: `2`, + FocalPlaneXResolution: `"2592000/225"`, + YResolution: `"180/1"`, + DateTime: `"2007:08:24 02:40:42"`, + ApertureValue: `"213/32"`, + ExposureBiasValue: `"0/3"`, + FocalLength: `"17400/1000"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1944`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2007:08:24 02:40:42"`, + Flash: `24`, + ExposureMode: `0`, + }, + "2007-11-07-11-40-44-sep-2007-11-07-11-40-44a.jpg": map[FieldName]string{ + YResolution: `"72/1"`, + Copyright: `" "`, + ThumbJPEGInterchangeFormat: `1306`, + ApertureValue: `"600/100"`, + MaxApertureValue: `"360/100"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + MakerNote: `""`, + SensingMethod: `2`, + CustomRendered: `1`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Software: `"Digital Camera FinePix Z1 Ver1.00"`, + DateTime: `"2007:11:07 11:40:44"`, + FNumber: `"800/100"`, + ExposureProgram: `2`, + XResolution: `"72/1"`, + ExifIFDPointer: `294`, + ExposureTime: `"10/2000"`, + ISOSpeedRatings: `64`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"20/10"`, + PixelYDimension: `1944`, + Model: `"FinePix Z1 "`, + ThumbJPEGInterchangeFormatLength: `9900`, + ShutterSpeedValue: `"764/100"`, + ExposureBiasValue: `"0/100"`, + LightSource: `0`, + FocalLength: `"610/100"`, + ColorSpace: `1`, + FocalPlaneXResolution: `"4442/1"`, + FileSource: `""`, + InteroperabilityIndex: `"R98"`, + Make: `"FUJIFILM"`, + DateTimeOriginal: `"2007:11:07 11:40:44"`, + DateTimeDigitized: `"2007:11:07 11:40:44"`, + BrightnessValue: `"906/100"`, + PixelXDimension: `2592`, + InteroperabilityIFDPointer: `1158`, + SceneType: `""`, + FocalPlaneResolutionUnit: `3`, + Sharpness: `0`, + SubjectDistanceRange: `0`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifVersion: `"0220"`, + MeteringMode: `5`, + Flash: `16`, + FocalPlaneYResolution: `"4442/1"`, + }, + "2008-06-02-10-03-57-sep-2008-06-02-10-03-57a.jpg": map[FieldName]string{ + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + FNumber: `"2800/1000"`, + CompressedBitsPerPixel: `"5896224/3145728"`, + MeteringMode: `4`, + MakerNote: `""`, + PixelXDimension: `2048`, + SensingMethod: `2`, + DateTimeDigitized: `"2008:06:13 06:16:19"`, + Copyright: `"Copyright 2006"`, + ExposureBiasValue: `"0/10"`, + PixelYDimension: `1536`, + Model: `"i533"`, + XResolution: `"288/3"`, + ISOSpeedRatings: `100`, + ExifVersion: `"0220"`, + Flash: `65`, + DigitalZoomRatio: `"100/100"`, + Orientation: `1`, + ThumbJPEGInterchangeFormatLength: `5972`, + ExposureProgram: `7`, + MaxApertureValue: `"2970/1000"`, + ThumbJPEGInterchangeFormat: `3756`, + YCbCrPositioning: `2`, + ExifIFDPointer: `226`, + ExposureTime: `"10/600"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + Software: `"00.00.1240a"`, + DateTime: `"2008:06:13 06:16:19"`, + ShutterSpeedValue: `"5907/1000"`, + ApertureValue: `"2970/1000"`, + LightSource: `4`, + FocalLength: `"6200/1000"`, + FlashpixVersion: `"0100"`, + YResolution: `"288/3"`, + DateTimeOriginal: `"2008:06:02 10:03:57"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `3620`, + ExposureMode: `0`, + Make: `"Polaroid"`, + }, + "2008-06-06-13-29-29-sep-2008-06-06-13-29-29a.jpg": map[FieldName]string{ + PixelXDimension: `1600`, + InteroperabilityIFDPointer: `3334`, + DigitalZoomRatio: `"3072/3072"`, + InteroperabilityIndex: `"R98"`, + Make: `"Canon"`, + DateTimeOriginal: `"2008:06:06 13:29:29"`, + DateTimeDigitized: `"2008:06:06 13:29:29"`, + FocalPlaneResolutionUnit: `2`, + ExifVersion: `"0220"`, + MeteringMode: `5`, + Flash: `16`, + FocalPlaneYResolution: `"1200000/169"`, + Orientation: `6`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + MaxApertureValue: `"116/32"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + YResolution: `"180/1"`, + ThumbJPEGInterchangeFormat: `5108`, + ApertureValue: `"116/32"`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + MakerNote: `""`, + UserComment: `""`, + SensingMethod: `2`, + DateTime: `"2008:06:06 13:29:29"`, + FNumber: `"35/10"`, + ISOSpeedRatings: `80`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"5/1"`, + XResolution: `"180/1"`, + ExifIFDPointer: `196`, + ExposureTime: `"1/320"`, + ExposureBiasValue: `"0/3"`, + FocalLength: `"8462/1000"`, + ColorSpace: `1`, + PixelYDimension: `1200`, + FocalPlaneXResolution: `"1600000/225"`, + Model: `"Canon DIGITAL IXUS 75"`, + ThumbJPEGInterchangeFormatLength: `6594`, + ShutterSpeedValue: `"266/32"`, + FileSource: `""`, + }, + "2008-06-17-01-21-30-sep-2008-06-17-01-21-30a.jpg": map[FieldName]string{ + MaxApertureValue: `"30/10"`, + ThumbJPEGInterchangeFormat: `1041`, + ThumbJPEGInterchangeFormatLength: `13506`, + ExposureProgram: `2`, + ExposureTime: `"10/326"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `253`, + LightSource: `0`, + FocalLength: `"645/100"`, + FlashpixVersion: `"0100"`, + YResolution: `"72/1"`, + Software: `"A520_CT019"`, + DateTime: `"2008:06:17 01:22:13"`, + InteroperabilityIFDPointer: `1011`, + Make: `"Polaroid"`, + DateTimeOriginal: `"2008:06:17 01:21:30"`, + ComponentsConfiguration: `""`, + FNumber: `"28/10"`, + ColorSpace: `1`, + FileSource: `""`, + UserComment: `""`, + PixelXDimension: `2592`, + DateTimeDigitized: `"2008:06:17 01:21:30"`, + CompressedBitsPerPixel: `"2/1"`, + MeteringMode: `2`, + PixelYDimension: `1944`, + ImageDescription: `"DCFC1247.JPG "`, + Model: `"5MP Digital Camera"`, + ExposureBiasValue: `"0/10"`, + ExifVersion: `"0220"`, + Flash: `0`, + Orientation: `1`, + XResolution: `"72/1"`, + ISOSpeedRatings: `100`, + }, + "2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg": map[FieldName]string{ + ImageDescription: `" "`, + Model: `"Z550a"`, + YResolution: `"72/1"`, + Software: `"R6GA004 prgCXC1250583_GENERIC_M 2.0"`, + DateTime: `"2008:09:02 17:43:48"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1024`, + Make: `"Sony Ericsson"`, + Orientation: `1`, + XResolution: `"72/1"`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2008:09:02 17:43:48"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `612`, + ThumbJPEGInterchangeFormat: `748`, + ThumbJPEGInterchangeFormatLength: `4641`, + ColorSpace: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `302`, + DateTimeDigitized: `"2008:09:02 17:43:48"`, + PixelXDimension: `1280`, + InteroperabilityIndex: `"R98"`, + }, + "2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg": map[FieldName]string{ + FocalLength: `"5800/1000"`, + ColorSpace: `1`, + PixelYDimension: `2304`, + FocalPlaneXResolution: `"3072000/225"`, + Model: `"Canon PowerShot SD750"`, + ThumbJPEGInterchangeFormatLength: `5513`, + ShutterSpeedValue: `"287/32"`, + ExposureBiasValue: `"0/3"`, + FileSource: `""`, + InteroperabilityIFDPointer: `3334`, + DigitalZoomRatio: `"3072/3072"`, + InteroperabilityIndex: `"R98"`, + Make: `"Canon"`, + DateTimeOriginal: `"2009:03:26 09:23:20"`, + DateTimeDigitized: `"2009:03:26 09:23:20"`, + PixelXDimension: `3072`, + FocalPlaneResolutionUnit: `2`, + MeteringMode: `5`, + Flash: `24`, + FocalPlaneYResolution: `"2304000/169"`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifVersion: `"0220"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + YResolution: `"180/1"`, + ThumbJPEGInterchangeFormat: `5108`, + ApertureValue: `"95/32"`, + MaxApertureValue: `"95/32"`, + ExposureMode: `0`, + SceneCaptureType: `0`, + MakerNote: `""`, + UserComment: `""`, + SensingMethod: `2`, + CustomRendered: `0`, + DateTime: `"2009:03:26 09:23:20"`, + FNumber: `"28/10"`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"5/1"`, + XResolution: `"180/1"`, + ExifIFDPointer: `196`, + ExposureTime: `"1/500"`, + ISOSpeedRatings: `160`, + }, + "2009-04-11-03-01-38-sep-2009-04-11-03-01-38a.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `33660`, + MaxApertureValue: `"30/10"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + YResolution: `"300/1"`, + UserComment: `" "`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Contrast: `0`, + MakerNote: `""`, + DateTime: `"2009:04:11 03:01:38"`, + FNumber: `"28/10"`, + ExposureProgram: `2`, + Software: `"COOLPIX L18 V1.1"`, + ExifIFDPointer: `230`, + ExposureTime: `"1/250"`, + ISOSpeedRatings: `227`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"4/1"`, + Saturation: `0`, + XResolution: `"300/1"`, + ThumbJPEGInterchangeFormatLength: `9697`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + FocalLength: `"5700/1000"`, + ColorSpace: `1`, + PixelYDimension: `2448`, + FileSource: `""`, + Model: `"COOLPIX L18"`, + DateTimeOriginal: `"2009:04:11 03:01:38"`, + DateTimeDigitized: `"2009:04:11 03:01:38"`, + PixelXDimension: `3264`, + InteroperabilityIFDPointer: `33536`, + SceneType: `""`, + DigitalZoomRatio: `"0/100"`, + GainControl: `1`, + Make: `"NIKON"`, + InteroperabilityIndex: `"R98"`, + Sharpness: `1`, + ImageDescription: `" "`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifVersion: `"0220"`, + MeteringMode: `5`, + Flash: `24`, + FocalLengthIn35mmFilm: `35`, + SubjectDistanceRange: `0`, + Orientation: `1`, + }, + "2009-04-23-07-21-35-sep-2009-04-23-07-21-35a.jpg": map[FieldName]string{ + Sharpness: `0`, + MeteringMode: `5`, + Flash: `9`, + FocalLengthIn35mmFilm: `35`, + SubjectDistanceRange: `3`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifVersion: `"0220"`, + WhiteBalance: `0`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `31176`, + MaxApertureValue: `"28/10"`, + FlashpixVersion: `"0100"`, + Contrast: `0`, + MakerNote: `""`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Software: `"Optio S50 Ver 1.00"`, + DateTime: `"2009:04:23 07:21:35"`, + FNumber: `"26/10"`, + ComponentsConfiguration: `""`, + CompressedBitsPerPixel: `"13301888/4915200"`, + Saturation: `0`, + XResolution: `"72/1"`, + ExifIFDPointer: `590`, + ExposureTime: `"1/40"`, + ISOSpeedRatings: `100`, + ColorSpace: `1`, + PixelYDimension: `1920`, + Model: `"PENTAX Optio S50"`, + ThumbJPEGInterchangeFormatLength: `6015`, + ExposureBiasValue: `"0/10"`, + FocalLength: `"58/10"`, + InteroperabilityIFDPointer: `31040`, + DigitalZoomRatio: `"0/100"`, + InteroperabilityIndex: `"R98"`, + Make: `"PENTAX Corporation"`, + DateTimeOriginal: `"2009:04:23 07:21:35"`, + DateTimeDigitized: `"2009:04:23 07:21:35"`, + PixelXDimension: `2560`, + }, + "2009-06-11-19-23-18-sep-2009-06-11-19-23-18a.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `606`, + ThumbJPEGInterchangeFormatLength: `7150`, + ExposureProgram: `1`, + ColorSpace: `65535`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `264`, + ExposureTime: `"1/4"`, + DateTimeDigitized: `"2009:06:11 19:23:18"`, + MeteringMode: `1`, + PixelXDimension: `1400`, + PixelYDimension: `2100`, + Model: `"Canon EOS DIGITAL REBEL XTi"`, + YResolution: `"3500000/10000"`, + Software: `"Adobe Photoshop CS3 Macintosh"`, + DateTime: `"2009:06:23 18:42:05"`, + ApertureValue: `"11257/1627"`, + ExposureBiasValue: `"0/1"`, + FocalLength: `"47/1"`, + Make: `"Canon"`, + Orientation: `1`, + XResolution: `"3500000/10000"`, + ISOSpeedRatings: `200`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2009:06:11 19:23:18"`, + Flash: `16`, + }, + "2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg": map[FieldName]string{ + DateTimeOriginal: `"2009:06:20 07:59:05"`, + Flash: `89`, + ExposureMode: `0`, + ExifVersion: `"0221"`, + ThumbJPEGInterchangeFormatLength: `4569`, + MaxApertureValue: `"36/10"`, + ColorSpace: `1`, + ExposureIndex: `"160/1"`, + WhiteBalance: `0`, + Sharpness: `0`, + ThumbJPEGInterchangeFormat: `9032`, + ExposureTime: `"1/500"`, + MeteringMode: `5`, + GainControl: `2`, + Saturation: `0`, + SubjectDistanceRange: `0`, + InteroperabilityIndex: `"R98"`, + ExifIFDPointer: `514`, + ShutterSpeedValue: `"9/1"`, + Model: `"KODAK EASYSHARE Z710 ZOOM DIGITAL CAMERA"`, + Orientation: `1`, + XResolution: `"480/1"`, + ISOSpeedRatings: `160`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `8728`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/100"`, + Make: `"EASTMAN KODAK COMPANY"`, + SceneCaptureType: `0`, + Contrast: `0`, + FocalLengthIn35mmFilm: `337`, + ExposureProgram: `2`, + FileSource: `""`, + FNumber: `"35/10"`, + YCbCrPositioning: `1`, + DateTimeDigitized: `"2009:06:20 07:59:05"`, + MakerNote: `""`, + PixelXDimension: `3072`, + SensingMethod: `2`, + SceneType: `""`, + ResolutionUnit: `2`, + ApertureValue: `"36/10"`, + ExposureBiasValue: `"0/3"`, + LightSource: `0`, + FocalLength: `"559/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2304`, + YResolution: `"480/1"`, + }, + "2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg": map[FieldName]string{ + XResolution: `"72/1"`, + ISOSpeedRatings: `100`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `1158`, + FocalPlaneYResolution: `"5292/1"`, + CustomRendered: `0`, + Make: `"FUJIFILM"`, + Orientation: `1`, + SceneCaptureType: `0`, + FileSource: `""`, + FNumber: `"400/100"`, + ExposureProgram: `2`, + DateTimeDigitized: `"2009:08:05 08:11:31"`, + MakerNote: `"FUJIFILM0130" !"#,012NORMAL d"`, + PixelXDimension: `2848`, + SensingMethod: `2`, + SceneType: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + Copyright: `" "`, + ApertureValue: `"400/100"`, + ExposureBiasValue: `"0/100"`, + LightSource: `0`, + FocalLength: `"720/100"`, + FlashpixVersion: `"0100"`, + YResolution: `"72/1"`, + DateTime: `"2009:08:05 08:11:31"`, + PixelYDimension: `2136`, + FocalPlaneXResolution: `"5292/1"`, + Flash: `16`, + ExposureMode: `0`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2009:08:05 08:11:31"`, + MaxApertureValue: `"300/100"`, + ColorSpace: `1`, + WhiteBalance: `1`, + Sharpness: `0`, + ThumbJPEGInterchangeFormat: `1306`, + ThumbJPEGInterchangeFormatLength: `8596`, + CompressedBitsPerPixel: `"20/10"`, + BrightnessValue: `"719/100"`, + MeteringMode: `5`, + SubjectDistanceRange: `0`, + InteroperabilityIndex: `"R98"`, + ExifIFDPointer: `294`, + ExposureTime: `"10/3000"`, + ShutterSpeedValue: `"820/100"`, + FocalPlaneResolutionUnit: `3`, + Model: `"FinePix E550 "`, + Software: `"Digital Camera FinePix E550 Ver1.00"`, + }, + "2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg": map[FieldName]string{ + CompressedBitsPerPixel: `"8/1"`, + MeteringMode: `5`, + MakerNote: `""`, + PixelXDimension: `2816`, + Saturation: `0`, + DateTimeDigitized: `"2010:06:08 04:44:24"`, + Model: `"DSC-S600"`, + ExposureBiasValue: `"0/10"`, + PixelYDimension: `2112`, + ImageDescription: `" "`, + XResolution: `"72/1"`, + ISOSpeedRatings: `80`, + ExifVersion: `"0221"`, + Flash: `31`, + CustomRendered: `0`, + Orientation: `1`, + ThumbJPEGInterchangeFormatLength: `4029`, + ExposureProgram: `2`, + MaxApertureValue: `"48/16"`, + ThumbJPEGInterchangeFormat: `6892`, + YCbCrPositioning: `2`, + ExifIFDPointer: `2314`, + ExposureTime: `"10/400"`, + SceneType: `""`, + ResolutionUnit: `2`, + DateTime: `"2010:06:08 04:44:24"`, + LightSource: `0`, + FocalLength: `"51/10"`, + FlashpixVersion: `"0100"`, + YResolution: `"72/1"`, + DateTimeOriginal: `"2010:06:08 04:44:24"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `6640`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Contrast: `0`, + Make: `"SONY"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + FNumber: `"28/10"`, + }, + "2010-06-20-20-07-39-sep-2010-06-20-20-07-39a.jpg": map[FieldName]string{ + FocalPlaneYResolution: `"2736000/181"`, + CustomRendered: `0`, + DigitalZoomRatio: `"3648/3648"`, + Orientation: `1`, + XResolution: `"4718592/65536"`, + ISOSpeedRatings: `800`, + ExifVersion: `"0220"`, + Flash: `16`, + ThumbJPEGInterchangeFormat: `3408`, + ThumbJPEGInterchangeFormatLength: `5126`, + MaxApertureValue: `"116/32"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `302`, + ExposureTime: `"1/10"`, + FocalLength: `"9681/1000"`, + FlashpixVersion: `"0100"`, + FocalPlaneXResolution: `"3648000/241"`, + YResolution: `"4718592/65536"`, + Software: `"QuickTime 7.6.6"`, + DateTime: `"2010:10:31 22:39:25"`, + ShutterSpeedValue: `"106/32"`, + ApertureValue: `"116/32"`, + Make: `"Canon"`, + DateTimeOriginal: `"2010:06:20 20:07:39"`, + ComponentsConfiguration: `""`, + ExposureMode: `0`, + SceneCaptureType: `0`, + FNumber: `"35/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + PixelXDimension: `3648`, + SensingMethod: `2`, + DateTimeDigitized: `"2010:06:20 20:07:39"`, + CompressedBitsPerPixel: `"3/1"`, + MeteringMode: `5`, + MakerNote: `""`, + UserComment: `""`, + ImageDescription: `" "`, + Model: `"Canon PowerShot SD1200 IS"`, + ExposureBiasValue: `"0/3"`, + PixelYDimension: `2736`, + FocalPlaneResolutionUnit: `2`, + }, + "2010-09-02-08-43-02-sep-2010-09-02-08-43-02a.jpg": map[FieldName]string{ + DateTime: `"2010:09:02 08:43:02"`, + ExposureProgram: `5`, + ExifVersion: `"0221"`, + CompressedBitsPerPixel: `"1/1"`, + Flash: `65`, + Saturation: `0`, + XResolution: `"72/1"`, + ISOSpeedRatings: `800`, + MaxApertureValue: `"362/100"`, + LightSource: `0`, + FocalLength: `"210/10"`, + ColorSpace: `1`, + Model: `"FE370,X880,C575 "`, + ThumbJPEGInterchangeFormat: `9204`, + SceneType: `""`, + DigitalZoomRatio: `"0/100"`, + SceneCaptureType: `3`, + GainControl: `2`, + Contrast: `0`, + DateTimeOriginal: `"2010:09:02 08:43:02"`, + MakerNote: `""`, + FNumber: `"53/10"`, + Sharpness: `0`, + ImageDescription: `"OLYMPUS DIGITAL CAMERA "`, + Software: `"Version 1.0 "`, + YCbCrPositioning: `2`, + ExifIFDPointer: `996`, + ExposureTime: `"10/500"`, + ComponentsConfiguration: `""`, + MeteringMode: `5`, + Orientation: `1`, + ResolutionUnit: `2`, + ExposureBiasValue: `"0/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2448`, + FileSource: `""`, + WhiteBalance: `0`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormatLength: `3562`, + UserComment: `" "`, + PixelXDimension: `3264`, + InteroperabilityIFDPointer: `1714`, + CustomRendered: `0`, + ExposureMode: `0`, + InteroperabilityIndex: `"R98"`, + Make: `"OLYMPUS IMAGING CORP. "`, + DateTimeDigitized: `"2010:09:02 08:43:02"`, + }, + "2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg": map[FieldName]string{ + ColorSpace: `1`, + WhiteBalance: `0`, + ThumbJPEGInterchangeFormat: `25601`, + ThumbJPEGInterchangeFormatLength: `3385`, + ExifIFDPointer: `157`, + PixelXDimension: `1200`, + MakerNote: `""`, + DateTimeDigitized: `"2011:01:24 22:06:02"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + Software: `"V 12.40"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1600`, + Model: `"6350"`, + YResolution: `"300/1"`, + XResolution: `"300/1"`, + ExifVersion: `"0220"`, + ComponentsConfiguration: `""`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Make: `"Nokia"`, + Orientation: `1`, + DigitalZoomRatio: `"1024/1024"`, + DateTimeOriginal: `"2011:01:24 22:06:02"`, + }, + "2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg": map[FieldName]string{ + Model: `"GU295"`, + Software: `"GU295-MSM1530032L-V10i-APR-22-2010-ATT-US"`, + Make: `"LG Elec."`, + Orientation: `1`, + XResolution: `"72/1"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `538`, + CustomRendered: `1`, + DigitalZoomRatio: `"0/0"`, + Contrast: `0`, + ExposureProgram: `2`, + FileSource: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + DateTimeDigitized: `"2011:03:07 09:28:03"`, + PixelXDimension: `1280`, + SceneType: `""`, + YResolution: `"72/1"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `960`, + ExifVersion: `"0220"`, + DateTimeOriginal: `"2011:03:07 09:28:03"`, + ExposureMode: `0`, + ThumbJPEGInterchangeFormat: `662`, + ThumbJPEGInterchangeFormatLength: `9850`, + ColorSpace: `1`, + WhiteBalance: `0`, + Sharpness: `0`, + ExifIFDPointer: `224`, + BrightnessValue: `"0/1024"`, + MeteringMode: `2`, + Saturation: `0`, + InteroperabilityIndex: `"R98"`, + }, + "2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg": map[FieldName]string{ + DateTimeOriginal: `"2011:05:07 13:02:49"`, + SceneType: `""`, + Contrast: `0`, + Software: `"M7500BSAAAAAAD3050"`, + GPSVersionID: `[2,2,0,0]`, + GPSLatitudeRef: `"N"`, + GPSAltitude: `"0/1"`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `218`, + GPSInfoIFDPointer: `502`, + ComponentsConfiguration: `""`, + GPSLongitudeRef: `"E"`, + GPSTimeStamp: `["19/1","3/1","43/1"]`, + GPSDateStamp: `"2011:05:07 "`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormatLength: `22806`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1536`, + FileSource: `""`, + WhiteBalance: `0`, + GPSAltitudeRef: `0`, + Make: `"HTC"`, + DateTimeDigitized: `"2011:05:07 13:02:49"`, + PixelXDimension: `2048`, + InteroperabilityIFDPointer: `472`, + GPSLatitude: `["0/1","0/1","0/100"]`, + InteroperabilityIndex: `"R98"`, + GPSLongitude: `["0/1","0/1","0/100"]`, + XResolution: `"72/1"`, + ExifVersion: `"0220"`, + GPSProcessingMethod: `"ASCIIHYBRID-FIX"`, + Model: `"RAPH800"`, + ThumbJPEGInterchangeFormat: `920`, + ColorSpace: `1`, + GPSMapDatum: `"WGS-84"`, + }, + "2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg": map[FieldName]string{ + ResolutionUnit: `2`, + DateTimeDigitized: `"2011:08:07 19:22:57"`, + SensingMethod: `2`, + SceneType: `""`, + YResolution: `"300/1"`, + DateTime: `"2011:08:11 09:46:32"`, + ApertureValue: `"433985/100000"`, + ExposureBiasValue: `"2/6"`, + LightSource: `0`, + FocalLength: `"620/10"`, + ExifVersion: `"0221"`, + DateTimeOriginal: `"2011:08:07 19:22:57"`, + Flash: `7`, + ExposureMode: `0`, + ThumbJPEGInterchangeFormat: `802`, + ThumbJPEGInterchangeFormatLength: `9117`, + MaxApertureValue: `"43/10"`, + WhiteBalance: `0`, + Sharpness: `0`, + ExifIFDPointer: `186`, + ExposureTime: `"1/30"`, + MeteringMode: `2`, + GainControl: `1`, + Saturation: `0`, + SubjectDistanceRange: `0`, + Model: `"NIKON D200"`, + Software: `"Ver.1.00"`, + ShutterSpeedValue: `"4906891/1000000"`, + SubSecTimeOriginal: `"65"`, + SubSecTimeDigitized: `"65"`, + FocalLengthIn35mmFilm: `93`, + SceneCaptureType: `0`, + Make: `"NIKON CORPORATION"`, + XResolution: `"300/1"`, + ISOSpeedRatings: `400`, + CFAPattern: `""`, + CustomRendered: `0`, + DigitalZoomRatio: `"1/1"`, + Contrast: `0`, + FNumber: `"45/10"`, + ExposureProgram: `3`, + SubjectDistance: `"63/100"`, + FileSource: `""`, + }, + "2011-10-28-17-50-18-sep-2011-10-28-17-50-18a.jpg": map[FieldName]string{ + SubSecTime: `"92"`, + CustomRendered: `0`, + ExposureMode: `0`, + SceneCaptureType: `0`, + UserComment: `""`, + DateTime: `"2011:11:08 07:27:55"`, + FNumber: `"4/1"`, + ExposureProgram: `2`, + SubSecTimeOriginal: `"92"`, + GPSVersionID: `[2,2,0,0]`, + Software: `"Adobe Photoshop CS4 Macintosh"`, + ExifIFDPointer: `364`, + ExposureTime: `"1/60"`, + ISOSpeedRatings: `800`, + ComponentsConfiguration: `""`, + XResolution: `"720000/10000"`, + ThumbJPEGInterchangeFormatLength: `6186`, + ShutterSpeedValue: `"393216/65536"`, + ExposureBiasValue: `"0/1"`, + FocalLength: `"34/1"`, + ColorSpace: `65535`, + PixelYDimension: `864`, + FocalPlaneXResolution: `"5616000/1459"`, + Model: `"Canon EOS 5D Mark II"`, + DateTimeOriginal: `"2011:10:28 17:50:18"`, + DateTimeDigitized: `"2011:10:28 17:50:18"`, + PixelXDimension: `576`, + InteroperabilityIFDPointer: `1120`, + InteroperabilityIndex: `"R03"`, + Make: `"Canon"`, + FocalPlaneResolutionUnit: `2`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + GPSInfoIFDPointer: `1152`, + ExifVersion: `"0221"`, + MeteringMode: `5`, + Flash: `9`, + FocalPlaneYResolution: `"3744000/958"`, + Orientation: `1`, + ThumbJPEGInterchangeFormat: `1266`, + ApertureValue: `"262144/65536"`, + SubSecTimeDigitized: `"92"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `1`, + YResolution: `"720000/10000"`, + }, + "2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg": map[FieldName]string{ + SubSecTimeOriginal: `"50"`, + DateTime: `"2011:10:28 18:25:43"`, + ISOSpeedRatings: `1250`, + ComponentsConfiguration: `""`, + Saturation: `0`, + XResolution: `"300/1"`, + ExposureTime: `"10/600"`, + ColorSpace: `1`, + ThumbJPEGInterchangeFormatLength: `3670`, + LightSource: `0`, + FocalLength: `"800/10"`, + CFAPattern: `""`, + DigitalZoomRatio: `"1/1"`, + InteroperabilityIndex: `"R98"`, + Make: `"NIKON CORPORATION"`, + DateTimeOriginal: `"2011:10:28 18:25:43"`, + InteroperabilityIFDPointer: `3604`, + Sharpness: `0`, + ExifVersion: `"0221"`, + MeteringMode: `5`, + Flash: `31`, + FocalLengthIn35mmFilm: `120`, + Orientation: `1`, + YCbCrPositioning: `2`, + SubSecTimeDigitized: `"50"`, + WhiteBalance: `0`, + ThumbJPEGInterchangeFormat: `3728`, + SensingMethod: `2`, + CustomRendered: `0`, + SubSecTime: `"50"`, + ExposureProgram: `0`, + Software: `"Ver.1.11 "`, + FNumber: `"56/10"`, + CompressedBitsPerPixel: `"2/1"`, + ExifIFDPointer: `208`, + FileSource: `""`, + Model: `"NIKON D80"`, + ExposureBiasValue: `"0/6"`, + PixelYDimension: `537`, + GainControl: `2`, + DateTimeDigitized: `"2011:10:28 18:25:43"`, + PixelXDimension: `800`, + SceneType: `""`, + ImageUniqueID: `"7fa4f6d028df5f2fc1bad8102be81064"`, + SubjectDistanceRange: `0`, + ResolutionUnit: `2`, + FlashpixVersion: `"0100"`, + YResolution: `"300/1"`, + MaxApertureValue: `"50/10"`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Contrast: `0`, + MakerNote: `""`, + UserComment: `"ASCII "`, + }, + "2011-11-18-15-38-34-sep-Photo11181538.jpg": map[FieldName]string{ + WhiteBalance: `0`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `642`, + FlashpixVersion: `"0100"`, + CustomRendered: `1`, + ExposureMode: `0`, + Contrast: `1`, + Software: `"M6290A-KPVMZL-2.6.0140T"`, + ExposureProgram: `2`, + Saturation: `0`, + XResolution: `"72/1"`, + ExifIFDPointer: `204`, + ComponentsConfiguration: `""`, + PixelYDimension: `1200`, + FileSource: `""`, + Model: `"P2020"`, + ThumbJPEGInterchangeFormatLength: `12226`, + ColorSpace: `1`, + BrightnessValue: `"0/1024"`, + PixelXDimension: `1600`, + InteroperabilityIFDPointer: `518`, + SceneType: `""`, + DigitalZoomRatio: `"0/0"`, + Make: `"PANTECH"`, + DateTimeOriginal: `"2011:11:18 15:38:34"`, + DateTimeDigitized: `"2011:11:18 15:38:34"`, + InteroperabilityIndex: `"R98"`, + Sharpness: `0`, + ExifVersion: `"0220"`, + MeteringMode: `2`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + }, + "2012-06-02-10-12-28-sep-2012-06-02-10-12-28.jpg": map[FieldName]string{ + YResolution: `"180/1"`, + Software: `"Ver.1.0 "`, + DateTime: `"2012:06:02 10:12:28"`, + LightSource: `0`, + FocalLength: `"50/10"`, + FlashpixVersion: `"0100"`, + SceneCaptureType: `0`, + Contrast: `0`, + Make: `"Panasonic"`, + DateTimeOriginal: `"2012:06:02 10:12:28"`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `10506`, + ExposureMode: `0`, + FocalLengthIn35mmFilm: `28`, + FNumber: `"33/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + Sharpness: `0`, + GainControl: `0`, + Saturation: `0`, + DateTimeDigitized: `"2012:06:02 10:12:28"`, + CompressedBitsPerPixel: `"4/1"`, + MeteringMode: `5`, + MakerNote: `""`, + PixelXDimension: `4608`, + SensingMethod: `2`, + Model: `"DMC-FH25"`, + ExposureBiasValue: `"0/100"`, + PixelYDimension: `3456`, + DigitalZoomRatio: `"0/10"`, + Orientation: `1`, + XResolution: `"180/1"`, + ISOSpeedRatings: `100`, + ExifVersion: `"0230"`, + Flash: `16`, + CustomRendered: `0`, + ThumbJPEGInterchangeFormat: `11764`, + ThumbJPEGInterchangeFormatLength: `7486`, + ExposureProgram: `2`, + MaxApertureValue: `"441/128"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `636`, + ExposureTime: `"10/4000"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + }, + "2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg": map[FieldName]string{ + ThumbJPEGInterchangeFormat: `5108`, + ThumbJPEGInterchangeFormatLength: `4855`, + MaxApertureValue: `"95/32"`, + ColorSpace: `1`, + WhiteBalance: `0`, + ExifIFDPointer: `240`, + ExposureTime: `"1/60"`, + CompressedBitsPerPixel: `"3/1"`, + MeteringMode: `5`, + UserComment: `""`, + InteroperabilityIndex: `"R98"`, + ImageDescription: `" "`, + Model: `"Canon PowerShot SD940 IS"`, + ShutterSpeedValue: `"189/32"`, + FocalPlaneResolutionUnit: `2`, + CustomRendered: `0`, + Make: `"Canon"`, + Orientation: `1`, + XResolution: `"180/1"`, + ISOSpeedRatings: `500`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `3288`, + FocalPlaneYResolution: `"2448000/183"`, + DigitalZoomRatio: `"4000/4000"`, + SceneCaptureType: `2`, + FNumber: `"28/10"`, + FileSource: `""`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + DateTimeDigitized: `"2012:09:21 22:07:34"`, + MakerNote: `""`, + PixelXDimension: `3264`, + SensingMethod: `2`, + FocalPlaneXResolution: `"3264000/244"`, + YResolution: `"180/1"`, + DateTime: `"2012:09:21 22:07:34"`, + ApertureValue: `"95/32"`, + ExposureBiasValue: `"0/3"`, + FocalLength: `"5000/1000"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2448`, + ExifVersion: `"0221"`, + DateTimeOriginal: `"2012:09:21 22:07:34"`, + Flash: `25`, + ExposureMode: `0`, + }, + "2012-12-19-21-38-40-sep-temple_square1.jpg": map[FieldName]string{ + InteroperabilityIFDPointer: `322`, + GPSLatitude: `["40/1","46/1","1322/100"]`, + InteroperabilityIndex: `"R98"`, + Make: `"HTC"`, + DateTimeOriginal: `"2012:12:19 21:38:40"`, + DateTimeDigitized: `"2012:12:19 21:38:40"`, + PixelXDimension: `3264`, + GPSLatitudeRef: `"N"`, + GPSLongitude: `["111/1","53/1","2840/100"]`, + GPSLongitudeRef: `"W"`, + GPSProcessingMethod: `"ASCIIGPS"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + GPSInfoIFDPointer: `352`, + ExifVersion: `"0220"`, + GPSMapDatum: `"WGS-84"`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `696`, + FlashpixVersion: `"0100"`, + GPSAltitudeRef: `0`, + GPSVersionID: `[2,2,0]`, + GPSAltitude: `"1334/1"`, + GPSTimeStamp: `["4/1","38/1","40/1"]`, + XResolution: `"72/1"`, + ExifIFDPointer: `136`, + ISOSpeedRatings: `801`, + ComponentsConfiguration: `""`, + PixelYDimension: `1952`, + GPSDateStamp: `"2012:12:20"`, + Model: `"ADR6400L"`, + ThumbJPEGInterchangeFormatLength: `38469`, + FocalLength: `"457/100"`, + ColorSpace: `1`, + }, + "2012-12-21-11-15-19-sep-IMG_0001.jpg": map[FieldName]string{ + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `360`, + ExposureTime: `"1/30"`, + InteroperabilityIndex: `"R98"`, + SubSecTimeDigitized: `"00"`, + FlashpixVersion: `"0100"`, + FocalPlaneXResolution: `"5184000/894"`, + YResolution: `"72/1"`, + DateTime: `"2012:12:21 11:15:19"`, + ShutterSpeedValue: `"327680/65536"`, + ApertureValue: `"286720/65536"`, + FocalLength: `"24/1"`, + LensModel: `"EF-S18-55mm f/3.5-5.6 IS II"`, + GPSVersionID: `[2,3,0,0]`, + InteroperabilityIFDPointer: `8806`, + ExposureMode: `0`, + SceneCaptureType: `0`, + Make: `"Canon"`, + GPSInfoIFDPointer: `9034`, + DateTimeOriginal: `"2012:12:21 11:15:19"`, + ComponentsConfiguration: `""`, + SubSecTime: `"00"`, + Artist: `""`, + FNumber: `"45/10"`, + ColorSpace: `1`, + WhiteBalance: `0`, + DateTimeDigitized: `"2012:12:21 11:15:19"`, + MeteringMode: `5`, + MakerNote: `""`, + UserComment: `""`, + PixelXDimension: `5184`, + FocalPlaneResolutionUnit: `2`, + Model: `"Canon EOS REBEL T4i"`, + Copyright: `""`, + ExposureBiasValue: `"0/1"`, + SubSecTimeOriginal: `"00"`, + PixelYDimension: `3456`, + FocalPlaneYResolution: `"3456000/597"`, + CustomRendered: `0`, + Orientation: `1`, + XResolution: `"72/1"`, + ISOSpeedRatings: `1600`, + ExifVersion: `"0230"`, + Flash: `16`, + ThumbJPEGInterchangeFormat: `10924`, + ThumbJPEGInterchangeFormatLength: `14327`, + ExposureProgram: `0`, + }, + "2013-02-05-23-12-09-sep-DSCI0001.jpg": map[FieldName]string{ + ApertureValue: `"3072/1000"`, + ExposureBiasValue: `"0/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `1200`, + FileSource: `""`, + YResolution: `"288/3"`, + ThumbJPEGInterchangeFormatLength: `5863`, + ShutterSpeedValue: `"5907/1000"`, + WhiteBalance: `0`, + InteroperabilityIFDPointer: `4838`, + ExposureMode: `0`, + InteroperabilityIndex: `"R98"`, + Make: `"Polaroid"`, + DateTimeDigitized: `"2013:02:05 23:12:09"`, + PixelXDimension: `1600`, + DateTime: `"2013:02:05 23:12:09"`, + ExposureProgram: `2`, + CompressedBitsPerPixel: `"3766184/1920000"`, + Flash: `1`, + FocalLengthIn35mmFilm: `35`, + XResolution: `"288/3"`, + ISOSpeedRatings: `100`, + ExifVersion: `"0210"`, + MaxApertureValue: `"3072/1000"`, + LightSource: `0`, + FocalLength: `"5954/1000"`, + ColorSpace: `1`, + Model: `"Polaroid i532"`, + Copyright: `"Copyright 2005"`, + ThumbJPEGInterchangeFormat: `4974`, + SceneType: `""`, + DigitalZoomRatio: `"100/100"`, + SceneCaptureType: `0`, + DateTimeOriginal: `"2013:02:05 23:12:09"`, + MakerNote: `" BARCODE:A265KS008000; ZP:812; FP:124; AWB:235,679; PWB:476,304; PMF:12,11610; LV:493; LUM:3-8-9-8-1-11;20;26;19;10;A:1,F1:6,F2:18;ET:145, W:2, F:3 ;FV: 41FV: 36FV: 43FV: 223FV: 258FV: 9FV: 466FV: 216FP: 10FP: 8FP: 6FP: 6FP: 6FP: 0FP: 8FP: 8AFS: 110"`, + SensingMethod: `2`, + Sharpness: `0`, + ImageDescription: `""`, + Software: `" 1.0"`, + FNumber: `"28/10"`, + ExifIFDPointer: `240`, + ExposureTime: `"1/60"`, + ComponentsConfiguration: `""`, + MeteringMode: `3`, + Orientation: `1`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + }, + "2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg": map[FieldName]string{ + Model: `"NIKON D70s"`, + ExposureBiasValue: `"0/6"`, + SubSecTimeOriginal: `"00"`, + PixelYDimension: `2000`, + CFAPattern: `""`, + CustomRendered: `0`, + DigitalZoomRatio: `"1/1"`, + Orientation: `1`, + XResolution: `"300/1"`, + ExifVersion: `"0221"`, + Flash: `31`, + ThumbJPEGInterchangeFormat: `28588`, + ThumbJPEGInterchangeFormatLength: `8886`, + ExposureProgram: `0`, + MaxApertureValue: `"36/10"`, + SceneType: `""`, + InteroperabilityIndex: `"R98"`, + ResolutionUnit: `2`, + YCbCrPositioning: `2`, + ExifIFDPointer: `216`, + ExposureTime: `"10/600"`, + FocalLength: `"180/10"`, + SubSecTimeDigitized: `"00"`, + FlashpixVersion: `"0100"`, + YResolution: `"300/1"`, + Software: `"Ver.1.00 "`, + DateTime: `"2099:08:12 19:59:29"`, + LightSource: `0`, + InteroperabilityIFDPointer: `28448`, + ExposureMode: `0`, + FocalLengthIn35mmFilm: `27`, + SceneCaptureType: `0`, + Make: `"NIKON CORPORATION"`, + DateTimeOriginal: `"2099:08:12 19:59:29"`, + ComponentsConfiguration: `""`, + SubSecTime: `"00"`, + Contrast: `1`, + Sharpness: `0`, + FNumber: `"35/10"`, + ColorSpace: `1`, + FileSource: `""`, + WhiteBalance: `0`, + UserComment: `"ASCII "`, + PixelXDimension: `3008`, + SensingMethod: `2`, + GainControl: `0`, + DateTimeDigitized: `"2099:08:12 19:59:29"`, + CompressedBitsPerPixel: `"2/1"`, + MeteringMode: `5`, + MakerNote: `""`, + Saturation: `0`, + SubjectDistanceRange: `0`, + }, + "2216-11-15-11-46-51-sep-2216-11-15-11-46-51a.jpg": map[FieldName]string{ + ExposureProgram: `2`, + FileSource: `""`, + FNumber: `"480/100"`, + YCbCrPositioning: `2`, + DateTimeDigitized: `"2216:11:15 11:46:51"`, + MakerNote: `""`, + PixelXDimension: `3296`, + SensingMethod: `2`, + SceneType: `""`, + ResolutionUnit: `2`, + ApertureValue: `"452/100"`, + ExposureBiasValue: `"0/10"`, + LightSource: `0`, + FocalLength: `"60/10"`, + FlashpixVersion: `"0100"`, + PixelYDimension: `2472`, + YResolution: `"480/1"`, + DateTimeOriginal: `"2216:11:15 11:46:51"`, + Flash: `24`, + ExposureMode: `0`, + ExifVersion: `"0221"`, + ThumbJPEGInterchangeFormatLength: `5175`, + MaxApertureValue: `"286/100"`, + ColorSpace: `1`, + ExposureIndex: `"80/1"`, + WhiteBalance: `0`, + Sharpness: `0`, + ThumbJPEGInterchangeFormat: `17818`, + ExposureTime: `"1016/1000000"`, + MeteringMode: `5`, + GainControl: `0`, + Saturation: `0`, + SubjectDistanceRange: `0`, + ExifIFDPointer: `2316`, + Software: `"KODAK EASYSHARE C813 ZOOM DIGITAL CAMERA"`, + ShutterSpeedValue: `"994/100"`, + Model: `"KODAK EASYSHARE C813 ZOOM DIGITAL CAMERA"`, + Orientation: `1`, + XResolution: `"480/1"`, + ISOSpeedRatings: `80`, + ComponentsConfiguration: `""`, + InteroperabilityIFDPointer: `17674`, + CustomRendered: `0`, + DigitalZoomRatio: `"0/10"`, + Make: `"EASTMAN KODAK COMPANY"`, + SceneCaptureType: `0`, + Contrast: `0`, + FocalLengthIn35mmFilm: `36`, + }, + "FailedHash-NoDate-sep-remembory.jpg": map[FieldName]string{ + Model: `"MFC-7840W"`, + YResolution: `"150/1"`, + Software: `"Apple Image Capture"`, + PixelYDimension: `1626`, + ExifIFDPointer: `192`, + PixelXDimension: `1232`, + Make: `"Brother"`, + Orientation: `1`, + XResolution: `"150/1"`, + ResolutionUnit: `2`, + }, + "f1-exif.jpg": map[FieldName]string{ + PixelXDimension: `0`, + Orientation: `1`, + XResolution: `"72/1"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:02"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + }, + "f2-exif.jpg": map[FieldName]string{ + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `2`, + XResolution: `"72/1"`, + }, + "f3-exif.jpg": map[FieldName]string{ + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `3`, + XResolution: `"72/1"`, + }, + "f4-exif.jpg": map[FieldName]string{ + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `4`, + XResolution: `"72/1"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + }, + "f5-exif.jpg": map[FieldName]string{ + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `5`, + XResolution: `"72/1"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + PixelYDimension: `0`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + }, + "f6-exif.jpg": map[FieldName]string{ + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `6`, + XResolution: `"72/1"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + }, + "f7-exif.jpg": map[FieldName]string{ + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `7`, + XResolution: `"72/1"`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + PixelYDimension: `0`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + }, + "f8-exif.jpg": map[FieldName]string{ + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + ExifIFDPointer: `134`, + ExifVersion: `"0210"`, + ComponentsConfiguration: `""`, + PixelXDimension: `0`, + Orientation: `8`, + XResolution: `"72/1"`, + FlashpixVersion: `"0100"`, + ColorSpace: `65535`, + PixelYDimension: `0`, + YResolution: `"72/1"`, + DateTime: `"2012:11:04 05:42:32"`, + }, + "geodegrees_as_string.jpg": map[FieldName]string{ + GPSAltitudeRef: `0`, + ThumbJPEGInterchangeFormat: `539`, + ThumbJPEGInterchangeFormatLength: `13132`, + WhiteBalance: `0`, + ExposureProgram: `0`, + Sharpness: `2`, + ExifIFDPointer: `114`, + ExposureTime: `"0/1024"`, + Saturation: `0`, + GPSLatitude: `"52,00000,50,00000,34,01180"`, + GPSTimeStamp: `"17,00000,8,00000,29,00000"`, + Model: `"HTC One_M8"`, + ApertureValue: `"2048/1024"`, + FocalLength: `"3072/1024"`, + GPSLatitudeRef: `"N"`, + GPSLongitude: `"11,00000,10,00000,58,28360"`, + GPSAltitude: `"0/1024"`, + GPSLongitudeRef: `"E"`, + GPSProcessingMethod: `"ASCII"`, + GPSInfoIFDPointer: `317`, + Make: `"HTC"`, + DateTimeOriginal: `"2014:04:26 19:09:19"`, + ISOSpeedRatings: `125`, + Contrast: `0`, + }, + "has-lens-info.jpg": map[FieldName]string{ + LensModel: `"iPhone 4S back camera 4.28mm f/2.4"`, + Model: `"iPhone 4S"`, + ThumbJPEGInterchangeFormatLength: `10875`, + ShutterSpeedValue: `"106906/10353"`, + FocalLength: `"107/25"`, + SubjectArea: `[1631,1223,881,881]`, + ColorSpace: `1`, + PixelYDimension: `2448`, + GPSLatitude: `["59/1","19/1","5717/100"]`, + Make: `"Apple"`, + DateTimeOriginal: `"2014:09:01 15:03:47"`, + DateTimeDigitized: `"2014:09:01 15:03:47"`, + BrightnessValue: `"3927/419"`, + PixelXDimension: `3264`, + SceneType: `""`, + LensMake: `"Apple"`, + GPSLatitudeRef: `"N"`, + GPSLongitude: `["18/1","3/1","5379/100"]`, + FocalLengthIn35mmFilm: `35`, + Orientation: `6`, + ResolutionUnit: `2`, + YCbCrPositioning: `1`, + GPSInfoIFDPointer: `948`, + ExifVersion: `"0221"`, + MeteringMode: `5`, + Flash: `16`, + GPSLongitudeRef: `"E"`, + YResolution: `"72/1"`, + ThumbJPEGInterchangeFormat: `1244`, + ApertureValue: `"4845/1918"`, + SubSecTimeDigitized: `"880"`, + FlashpixVersion: `"0100"`, + WhiteBalance: `0`, + GPSAltitudeRef: `0`, + MakerNote: `""`, + SensingMethod: `2`, + ExposureMode: `0`, + SceneCaptureType: `0`, + GPSImgDirection: `"18329/175"`, + Software: `"7.1.1"`, + DateTime: `"2014:09:01 15:03:47"`, + FNumber: `"12/5"`, + ExposureProgram: `2`, + SubSecTimeOriginal: `"880"`, + GPSImgDirectionRef: `"T"`, + XResolution: `"72/1"`, + ExifIFDPointer: `204`, + ExposureTime: `"1/1284"`, + ISOSpeedRatings: `50`, + ComponentsConfiguration: `""`, + GPSAltitude: `"29/1"`, + GPSTimeStamp: `["13/1","3/1","4279/100"]`, + }, +} diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg Binary files differnew file mode 100644 index 000000000..6f3be2480 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2004-01-11-22-45-15-sep-2004-01-11-22-45-15a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg Binary files differnew file mode 100644 index 000000000..39891df84 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-08-03-16-29-38-sep-2006-08-03-16-29-38a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg Binary files differnew file mode 100644 index 000000000..4721e7542 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-11-11-19-17-56-sep-2006-11-11-19-17-56a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg Binary files differnew file mode 100644 index 000000000..8c0997ea0 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-10-23-58-20-sep-2006-12-10-23-58-20a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg Binary files differnew file mode 100644 index 000000000..1c6e7601d --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-17-07-09-14-sep-2006-12-17-07-09-14a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg Binary files differnew file mode 100644 index 000000000..8aaf632be --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2006-12-21-15-55-26-sep-2006-12-21-15-55-26a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-01-12-00-00-sep-2007-01-01-12-00-00a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-01-12-00-00-sep-2007-01-01-12-00-00a.jpg Binary files differnew file mode 100644 index 000000000..c44db32c1 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-01-12-00-00-sep-2007-01-01-12-00-00a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg Binary files differnew file mode 100644 index 000000000..f025460d6 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-01-17-21-49-44-sep-2007-01-17-21-49-44a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg Binary files differnew file mode 100644 index 000000000..3f1fbfbdf --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-02-02-18-13-29-sep-2007-02-02-18-13-29a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg Binary files differnew file mode 100644 index 000000000..351935778 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-02-17-02-21-sep-2007-05-02-17-02-21a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg Binary files differnew file mode 100644 index 000000000..175b60663 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-12-08-19-07-sep-2007-05-12-08-19-07a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-26-04-49-45-sep-2007-05-26-04-49-45a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-26-04-49-45-sep-2007-05-26-04-49-45a.jpg Binary files differnew file mode 100644 index 000000000..90a6c92b0 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-26-04-49-45-sep-2007-05-26-04-49-45a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg Binary files differnew file mode 100644 index 000000000..74f30c351 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-05-30-14-28-01-sep-2007-05-30-14-28-01a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-06-16-15-25-sep-2007-06-06-16-15-25a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-06-16-15-25-sep-2007-06-06-16-15-25a.jpg Binary files differnew file mode 100644 index 000000000..0a025a0b8 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-06-16-15-25-sep-2007-06-06-16-15-25a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-26-10-13-04-sep-2007-06-26-10-13-04a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-26-10-13-04-sep-2007-06-26-10-13-04a.jpg Binary files differnew file mode 100644 index 000000000..526cefafd --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-06-26-10-13-04-sep-2007-06-26-10-13-04a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-07-13-17-02-30-sep-2007-07-13-17-02-30a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-07-13-17-02-30-sep-2007-07-13-17-02-30a.jpg Binary files differnew file mode 100644 index 000000000..c39e90fca --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-07-13-17-02-30-sep-2007-07-13-17-02-30a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg Binary files differnew file mode 100644 index 000000000..81be2a200 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-15-14-42-46-sep-2007-08-15-14-42-46a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg Binary files differnew file mode 100644 index 000000000..aa457643d --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-08-24-02-40-42-sep-2007-08-24-02-40-42a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-11-07-11-40-44-sep-2007-11-07-11-40-44a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-11-07-11-40-44-sep-2007-11-07-11-40-44a.jpg Binary files differnew file mode 100644 index 000000000..916a2b6c3 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2007-11-07-11-40-44-sep-2007-11-07-11-40-44a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-02-10-03-57-sep-2008-06-02-10-03-57a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-02-10-03-57-sep-2008-06-02-10-03-57a.jpg Binary files differnew file mode 100644 index 000000000..0aedf3003 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-02-10-03-57-sep-2008-06-02-10-03-57a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-06-13-29-29-sep-2008-06-06-13-29-29a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-06-13-29-29-sep-2008-06-06-13-29-29a.jpg Binary files differnew file mode 100644 index 000000000..a291900e3 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-06-13-29-29-sep-2008-06-06-13-29-29a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-17-01-21-30-sep-2008-06-17-01-21-30a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-17-01-21-30-sep-2008-06-17-01-21-30a.jpg Binary files differnew file mode 100644 index 000000000..805d1d0f0 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-06-17-01-21-30-sep-2008-06-17-01-21-30a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg Binary files differnew file mode 100644 index 000000000..c866423c7 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2008-09-02-17-43-48-sep-2008-09-02-17-43-48a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg Binary files differnew file mode 100644 index 000000000..761bf6488 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-03-26-09-23-20-sep-2009-03-26-09-23-20a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-11-03-01-38-sep-2009-04-11-03-01-38a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-11-03-01-38-sep-2009-04-11-03-01-38a.jpg Binary files differnew file mode 100644 index 000000000..484fe3759 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-11-03-01-38-sep-2009-04-11-03-01-38a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-23-07-21-35-sep-2009-04-23-07-21-35a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-23-07-21-35-sep-2009-04-23-07-21-35a.jpg Binary files differnew file mode 100644 index 000000000..f39db7d9a --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-04-23-07-21-35-sep-2009-04-23-07-21-35a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-11-19-23-18-sep-2009-06-11-19-23-18a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-11-19-23-18-sep-2009-06-11-19-23-18a.jpg Binary files differnew file mode 100644 index 000000000..599764bf8 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-11-19-23-18-sep-2009-06-11-19-23-18a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg Binary files differnew file mode 100644 index 000000000..8718269e9 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-06-20-07-59-05-sep-2009-06-20-07-59-05a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg Binary files differnew file mode 100644 index 000000000..9598b2136 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2009-08-05-08-11-31-sep-2009-08-05-08-11-31a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg Binary files differnew file mode 100644 index 000000000..33f7d9b20 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-08-04-44-24-sep-2010-06-08-04-44-24a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-20-20-07-39-sep-2010-06-20-20-07-39a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-20-20-07-39-sep-2010-06-20-20-07-39a.jpg Binary files differnew file mode 100644 index 000000000..ec2faa1a9 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-06-20-20-07-39-sep-2010-06-20-20-07-39a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-09-02-08-43-02-sep-2010-09-02-08-43-02a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-09-02-08-43-02-sep-2010-09-02-08-43-02a.jpg Binary files differnew file mode 100644 index 000000000..3b7f906db --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2010-09-02-08-43-02-sep-2010-09-02-08-43-02a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg Binary files differnew file mode 100644 index 000000000..1a4af42d3 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-01-24-22-06-02-sep-2011-01-24-22-06-02a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg Binary files differnew file mode 100644 index 000000000..42d347656 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-03-07-09-28-03-sep-2011-03-07-09-28-03a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg Binary files differnew file mode 100644 index 000000000..7e84ec481 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-05-07-13-02-49-sep-2011-05-07-13-02-49a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg Binary files differnew file mode 100644 index 000000000..16fad2ecb --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-08-07-19-22-57-sep-2011-08-07-19-22-57a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-17-50-18-sep-2011-10-28-17-50-18a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-17-50-18-sep-2011-10-28-17-50-18a.jpg Binary files differnew file mode 100644 index 000000000..f6020a8c9 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-17-50-18-sep-2011-10-28-17-50-18a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg Binary files differnew file mode 100644 index 000000000..3aa541878 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-10-28-18-25-43-sep-2011-10-28-18-25-43.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-11-18-15-38-34-sep-Photo11181538.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-11-18-15-38-34-sep-Photo11181538.jpg Binary files differnew file mode 100644 index 000000000..48ef933a2 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2011-11-18-15-38-34-sep-Photo11181538.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-06-02-10-12-28-sep-2012-06-02-10-12-28.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-06-02-10-12-28-sep-2012-06-02-10-12-28.jpg Binary files differnew file mode 100644 index 000000000..f83270eee --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-06-02-10-12-28-sep-2012-06-02-10-12-28.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg Binary files differnew file mode 100644 index 000000000..5cdb55aac --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-09-21-22-07-34-sep-2012-09-21-22-07-34.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg Binary files differnew file mode 100644 index 000000000..4cc074f8e --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-19-21-38-40-sep-temple_square1.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-21-11-15-19-sep-IMG_0001.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-21-11-15-19-sep-IMG_0001.jpg Binary files differnew file mode 100644 index 000000000..ba23c3c42 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2012-12-21-11-15-19-sep-IMG_0001.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2013-02-05-23-12-09-sep-DSCI0001.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2013-02-05-23-12-09-sep-DSCI0001.jpg Binary files differnew file mode 100644 index 000000000..0396148af --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2013-02-05-23-12-09-sep-DSCI0001.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg Binary files differnew file mode 100644 index 000000000..9729182b3 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2099-08-12-19-59-29-sep-2099-08-12-19-59-29a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/2216-11-15-11-46-51-sep-2216-11-15-11-46-51a.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/2216-11-15-11-46-51-sep-2216-11-15-11-46-51a.jpg Binary files differnew file mode 100644 index 000000000..ae53a397a --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/2216-11-15-11-46-51-sep-2216-11-15-11-46-51a.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/FailedHash-NoDate-sep-remembory.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/FailedHash-NoDate-sep-remembory.jpg Binary files differnew file mode 100644 index 000000000..9fb415124 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/FailedHash-NoDate-sep-remembory.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg Binary files differnew file mode 100644 index 000000000..ff003e394 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f1-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg Binary files differnew file mode 100644 index 000000000..7e0f170e3 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f2-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg Binary files differnew file mode 100644 index 000000000..3ed7b16a7 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f3-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg Binary files differnew file mode 100644 index 000000000..0e081f919 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f4-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg Binary files differnew file mode 100644 index 000000000..e8d875479 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f5-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f6-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f6-exif.jpg Binary files differnew file mode 100644 index 000000000..4e2c86415 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f6-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg Binary files differnew file mode 100644 index 000000000..b5dddea44 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f7-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/f8-exif.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/f8-exif.jpg Binary files differnew file mode 100644 index 000000000..fb050fc6d --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/f8-exif.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/geodegrees_as_string.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/geodegrees_as_string.jpg Binary files differnew file mode 100644 index 000000000..280a70ec4 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/geodegrees_as_string.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg b/vendor/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg Binary files differnew file mode 100644 index 000000000..57757da33 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exif/samples/has-lens-info.jpg diff --git a/vendor/github.com/rwcarlsen/goexif/exifstat/main.go b/vendor/github.com/rwcarlsen/goexif/exifstat/main.go new file mode 100644 index 000000000..0b383c9d5 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/exifstat/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + + "github.com/rwcarlsen/goexif/exif" + "github.com/rwcarlsen/goexif/mknote" + "github.com/rwcarlsen/goexif/tiff" +) + +var mnote = flag.Bool("mknote", false, "try to parse makernote data") +var thumb = flag.Bool("thumb", false, "dump thumbail data to stdout (for first listed image file)") + +func main() { + flag.Parse() + fnames := flag.Args() + + if *mnote { + exif.RegisterParsers(mknote.All...) + } + + for _, name := range fnames { + f, err := os.Open(name) + if err != nil { + log.Printf("err on %v: %v", name, err) + continue + } + + x, err := exif.Decode(f) + if err != nil { + log.Printf("err on %v: %v", name, err) + continue + } + + if *thumb { + data, err := x.JpegThumbnail() + if err != nil { + log.Fatal("no thumbnail present") + } + if _, err := os.Stdout.Write(data); err != nil { + log.Fatal(err) + } + return + } + + fmt.Printf("\n---- Image '%v' ----\n", name) + x.Walk(Walker{}) + } +} + +type Walker struct{} + +func (_ Walker) Walk(name exif.FieldName, tag *tiff.Tag) error { + data, _ := tag.MarshalJSON() + fmt.Printf(" %v: %v\n", name, string(data)) + return nil +} diff --git a/vendor/github.com/rwcarlsen/goexif/mknote/fields.go b/vendor/github.com/rwcarlsen/goexif/mknote/fields.go new file mode 100644 index 000000000..e67d11c20 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/mknote/fields.go @@ -0,0 +1,268 @@ +package mknote + +import "github.com/rwcarlsen/goexif/exif" + +// Useful resources used in creating these tables: +// http://www.exiv2.org/makernote.html +// http://www.exiv2.org/tags-canon.html +// http://www.exiv2.org/tags-nikon.html + +// Known Maker Note fields +const ( + // common fields + ISOSpeed exif.FieldName = "ISOSpeed" + ColorMode = "ColorMode" + Quality = "Quality" + Sharpening = "Sharpening" + Focus = "Focus" + FlashSetting = "FlashSetting" + FlashDevice = "FlashDevice" + WhiteBalanceBias = "WhiteBalanceBias" + WB_RBLevels = "WB_RBLevels" + ProgramShift = "ProgramShift" + ExposureDiff = "ExposureDiff" + ISOSelection = "ISOSelection" + DataDump = "DataDump" + Preview = "Preview" + FlashComp = "FlashComp" + ISOSettings = "ISOSettings" + ImageBoundary = "ImageBoundary" + FlashExposureComp = "FlashExposureComp" + FlashBracketComp = "FlashBracketComp" + ExposureBracketComp = "ExposureBracketComp" + ImageProcessing = "ImageProcessing" + CropHiSpeed = "CropHiSpeed" + ExposureTuning = "ExposureTuning" + SerialNumber = "SerialNumber" + ImageAuthentication = "ImageAuthentication" + ActiveDLighting = "ActiveDLighting" + VignetteControl = "VignetteControl" + ImageAdjustment = "ImageAdjustment" + ToneComp = "ToneComp" + AuxiliaryLens = "AuxiliaryLens" + LensType = "LensType" + Lens = "Lens" + FocusDistance = "FocusDistance" + DigitalZoom = "DigitalZoom" + FlashMode = "FlashMode" + ShootingMode = "ShootingMode" + AutoBracketRelease = "AutoBracketRelease" + LensFStops = "LensFStops" + ContrastCurve = "ContrastCurve" + ColorHue = "ColorHue" + SceneMode = "SceneMode" + HueAdjustment = "HueAdjustment" + NEFCompression = "NEFCompression" + NoiseReduction = "NoiseReduction" + LinearizationTable = "LinearizationTable" + RawImageCenter = "RawImageCenter" + SensorPixelSize = "SensorPixelSize" + SceneAssist = "SceneAssist" + RetouchHistory = "RetouchHistory" + ImageDataSize = "ImageDataSize" + ImageCount = "ImageCount" + DeletedImageCount = "DeletedImageCount" + ShutterCount = "ShutterCount" + ImageOptimization = "ImageOptimization" + SaturationText = "SaturationText" + VariProgram = "VariProgram" + ImageStabilization = "ImageStabilization" + AFResponse = "AFResponse" + HighISONoiseReduction = "HighISONoiseReduction" + ToningEffect = "ToningEffect" + PrintIM = "PrintIM" + CaptureData = "CaptureData" + CaptureVersion = "CaptureVersion" + CaptureOffsets = "CaptureOffsets" + ScanIFD = "ScanIFD" + ICCProfile = "ICCProfile" + CaptureOutput = "CaptureOutput" + Panorama = "Panorama" + ImageType = "ImageType" + FirmwareVersion = "FirmwareVersion" + FileNumber = "FileNumber" + OwnerName = "OwnerName" + CameraInfo = "CameraInfo" + CustomFunctions = "CustomFunctions" + ModelID = "ModelID" + PictureInfo = "PictureInfo" + ThumbnailImageValidArea = "ThumbnailImageValidArea" + SerialNumberFormat = "SerialNumberFormat" + SuperMacro = "SuperMacro" + OriginalDecisionDataOffset = "OriginalDecisionDataOffset" + WhiteBalanceTable = "WhiteBalanceTable" + LensModel = "LensModel" + InternalSerialNumber = "InternalSerialNumber" + DustRemovalData = "DustRemovalData" + ProcessingInfo = "ProcessingInfo" + MeasuredColor = "MeasuredColor" + VRDOffset = "VRDOffset" + SensorInfo = "SensorInfo" + ColorData = "ColorData" + + // Nikon-specific fields + Nikon_Version = "Nikon.Version" + Nikon_WhiteBalance = "Nikon.WhiteBalance" + Nikon_ColorSpace = "Nikon.ColorSpace" + Nikon_LightSource = "Nikon.LightSource" + Nikon_Saturation = "Nikon_Saturation" + Nikon_ShotInfo = "Nikon.ShotInfo" // A sub-IFD + Nikon_VRInfo = "Nikon.VRInfo" // A sub-IFD + Nikon_PictureControl = "Nikon.PictureControl" // A sub-IFD + Nikon_WorldTime = "Nikon.WorldTime" // A sub-IFD + Nikon_ISOInfo = "Nikon.ISOInfo" // A sub-IFD + Nikon_AFInfo = "Nikon.AFInfo" // A sub-IFD + Nikon_ColorBalance = "Nikon.ColorBalance" // A sub-IFD + Nikon_LensData = "Nikon.LensData" // A sub-IFD + Nikon_SerialNO = "Nikon.SerialNO" // usually starts with "NO=" + Nikon_FlashInfo = "Nikon.FlashInfo" // A sub-IFD + Nikon_MultiExposure = "Nikon.MultiExposure" // A sub-IFD + Nikon_AFInfo2 = "Nikon.AFInfo2" // A sub-IFD + Nikon_FileInfo = "Nikon.FileInfo" // A sub-IFD + Nikon_AFTune = "Nikon.AFTune" // A sub-IFD + Nikon3_0x000a = "Nikon3.0x000a" + Nikon3_0x009b = "Nikon3.0x009b" + Nikon3_0x009f = "Nikon3.0x009f" + Nikon3_0x00a3 = "Nikon3.0x00a3" + + // Canon-specific fiends + Canon_CameraSettings = "Canon.CameraSettings" // A sub-IFD + Canon_ShotInfo = "Canon.ShotInfo" // A sub-IFD + Canon_AFInfo = "Canon.AFInfo" + Canon_0x0000 = "Canon.0x0000" + Canon_0x0003 = "Canon.0x0003" + Canon_0x00b5 = "Canon.0x00b5" + Canon_0x00c0 = "Canon.0x00c0" + Canon_0x00c1 = "Canon.0x00c1" +) + +var makerNoteCanonFields = map[uint16]exif.FieldName{ + 0x0000: Canon_0x0000, + 0x0001: Canon_CameraSettings, + 0x0002: exif.FocalLength, + 0x0003: Canon_0x0003, + 0x0004: Canon_ShotInfo, + 0x0005: Panorama, + 0x0006: ImageType, + 0x0007: FirmwareVersion, + 0x0008: FileNumber, + 0x0009: OwnerName, + 0x000c: SerialNumber, + 0x000d: CameraInfo, + 0x000f: CustomFunctions, + 0x0010: ModelID, + 0x0012: PictureInfo, + 0x0013: ThumbnailImageValidArea, + 0x0015: SerialNumberFormat, + 0x001a: SuperMacro, + 0x0026: Canon_AFInfo, + 0x0083: OriginalDecisionDataOffset, + 0x00a4: WhiteBalanceTable, + 0x0095: LensModel, + 0x0096: InternalSerialNumber, + 0x0097: DustRemovalData, + 0x0099: CustomFunctions, + 0x00a0: ProcessingInfo, + 0x00aa: MeasuredColor, + 0x00b4: exif.ColorSpace, + 0x00b5: Canon_0x00b5, + 0x00c0: Canon_0x00c0, + 0x00c1: Canon_0x00c1, + 0x00d0: VRDOffset, + 0x00e0: SensorInfo, + 0x4001: ColorData, +} + +// Nikon version 3 Maker Notes fields (used by E5400, SQ, D2H, D70, and newer) +var makerNoteNikon3Fields = map[uint16]exif.FieldName{ + 0x0001: Nikon_Version, + 0x0002: ISOSpeed, + 0x0003: ColorMode, + 0x0004: Quality, + 0x0005: Nikon_WhiteBalance, + 0x0006: Sharpening, + 0x0007: Focus, + 0x0008: FlashSetting, + 0x0009: FlashDevice, + 0x000a: Nikon3_0x000a, + 0x000b: WhiteBalanceBias, + 0x000c: WB_RBLevels, + 0x000d: ProgramShift, + 0x000e: ExposureDiff, + 0x000f: ISOSelection, + 0x0010: DataDump, + 0x0011: Preview, + 0x0012: FlashComp, + 0x0013: ISOSettings, + 0x0016: ImageBoundary, + 0x0017: FlashExposureComp, + 0x0018: FlashBracketComp, + 0x0019: ExposureBracketComp, + 0x001a: ImageProcessing, + 0x001b: CropHiSpeed, + 0x001c: ExposureTuning, + 0x001d: SerialNumber, + 0x001e: Nikon_ColorSpace, + 0x001f: Nikon_VRInfo, + 0x0020: ImageAuthentication, + 0x0022: ActiveDLighting, + 0x0023: Nikon_PictureControl, + 0x0024: Nikon_WorldTime, + 0x0025: Nikon_ISOInfo, + 0x002a: VignetteControl, + 0x0080: ImageAdjustment, + 0x0081: ToneComp, + 0x0082: AuxiliaryLens, + 0x0083: LensType, + 0x0084: Lens, + 0x0085: FocusDistance, + 0x0086: DigitalZoom, + 0x0087: FlashMode, + 0x0088: Nikon_AFInfo, + 0x0089: ShootingMode, + 0x008a: AutoBracketRelease, + 0x008b: LensFStops, + 0x008c: ContrastCurve, + 0x008d: ColorHue, + 0x008f: SceneMode, + 0x0090: Nikon_LightSource, + 0x0091: Nikon_ShotInfo, + 0x0092: HueAdjustment, + 0x0093: NEFCompression, + 0x0094: Nikon_Saturation, + 0x0095: NoiseReduction, + 0x0096: LinearizationTable, + 0x0097: Nikon_ColorBalance, + 0x0098: Nikon_LensData, + 0x0099: RawImageCenter, + 0x009a: SensorPixelSize, + 0x009b: Nikon3_0x009b, + 0x009c: SceneAssist, + 0x009e: RetouchHistory, + 0x009f: Nikon3_0x009f, + 0x00a0: Nikon_SerialNO, + 0x00a2: ImageDataSize, + 0x00a3: Nikon3_0x00a3, + 0x00a5: ImageCount, + 0x00a6: DeletedImageCount, + 0x00a7: ShutterCount, + 0x00a8: Nikon_FlashInfo, + 0x00a9: ImageOptimization, + 0x00aa: SaturationText, + 0x00ab: VariProgram, + 0x00ac: ImageStabilization, + 0x00ad: AFResponse, + 0x00b0: Nikon_MultiExposure, + 0x00b1: HighISONoiseReduction, + 0x00b3: ToningEffect, + 0x00b7: Nikon_AFInfo2, + 0x00b8: Nikon_FileInfo, + 0x00b9: Nikon_AFTune, + 0x0e00: PrintIM, + 0x0e01: CaptureData, + 0x0e09: CaptureVersion, + 0x0e0e: CaptureOffsets, + 0x0e10: ScanIFD, + 0x0e1d: ICCProfile, + 0x0e1e: CaptureOutput, +} diff --git a/vendor/github.com/rwcarlsen/goexif/mknote/mknote.go b/vendor/github.com/rwcarlsen/goexif/mknote/mknote.go new file mode 100644 index 000000000..1e6021621 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/mknote/mknote.go @@ -0,0 +1,70 @@ +// Package mknote provides makernote parsers that can be used with goexif/exif. +package mknote + +import ( + "bytes" + + "github.com/rwcarlsen/goexif/exif" + "github.com/rwcarlsen/goexif/tiff" +) + +var ( + // Canon is an exif.Parser for canon makernote data. + Canon = &canon{} + // NikonV3 is an exif.Parser for nikon makernote data. + NikonV3 = &nikonV3{} + // All is a list of all available makernote parsers + All = []exif.Parser{Canon, NikonV3} +) + +type canon struct{} + +// Parse decodes all Canon makernote data found in x and adds it to x. +func (_ *canon) Parse(x *exif.Exif) error { + m, err := x.Get(exif.MakerNote) + if err != nil { + return nil + } + + mk, err := x.Get(exif.Make) + if err != nil { + return nil + } + + if val, err := mk.StringVal(); err != nil || val != "Canon" { + return nil + } + + // Canon notes are a single IFD directory with no header. + // Reader offsets need to be w.r.t. the original tiff structure. + buf := bytes.NewReader(append(make([]byte, m.ValOffset), m.Val...)) + buf.Seek(int64(m.ValOffset), 0) + + mkNotesDir, _, err := tiff.DecodeDir(buf, x.Tiff.Order) + if err != nil { + return err + } + x.LoadTags(mkNotesDir, makerNoteCanonFields, false) + return nil +} + +type nikonV3 struct{} + +// Parse decodes all Nikon makernote data found in x and adds it to x. +func (_ *nikonV3) Parse(x *exif.Exif) error { + m, err := x.Get(exif.MakerNote) + if err != nil { + return nil + } else if bytes.Compare(m.Val[:6], []byte("Nikon\000")) != 0 { + return nil + } + + // Nikon v3 maker note is a self-contained IFD (offsets are relative + // to the start of the maker note) + mkNotes, err := tiff.Decode(bytes.NewReader(m.Val[10:])) + if err != nil { + return err + } + x.LoadTags(mkNotes.Dirs[0], makerNoteNikon3Fields, false) + return nil +} diff --git a/vendor/github.com/rwcarlsen/goexif/tiff/tiff_test.go b/vendor/github.com/rwcarlsen/goexif/tiff/tiff_test.go new file mode 100644 index 000000000..5db348dc8 --- /dev/null +++ b/vendor/github.com/rwcarlsen/goexif/tiff/tiff_test.go @@ -0,0 +1,235 @@ +package tiff + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "flag" + "os" + "path/filepath" + "testing" +) + +var dataDir = flag.String("test_data_dir", ".", "Directory where the data files for testing are located") + +type input struct { + tgId string + tpe string + nVals string + offset string + val string +} + +type output struct { + id uint16 + typ DataType + count uint32 + val []byte +} + +type tagTest struct { + big input // big endian + little input // little endian + out output +} + +/////////////////////////////////////////////// +//// Big endian Tests ///////////////////////// +/////////////////////////////////////////////// +var set1 = []tagTest{ + //////////// string type ////////////// + tagTest{ + // {"TgId", "TYPE", "N-VALUES", "OFFSET--", "VAL..."}, + input{"0003", "0002", "00000002", "11000000", ""}, + input{"0300", "0200", "02000000", "11000000", ""}, + output{0x0003, DataType(0x0002), 0x0002, []byte{0x11, 0x00}}, + }, + tagTest{ + input{"0001", "0002", "00000006", "00000012", "111213141516"}, + input{"0100", "0200", "06000000", "12000000", "111213141516"}, + output{0x0001, DataType(0x0002), 0x0006, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16}}, + }, + //////////// int (1-byte) type //////////////// + tagTest{ + input{"0001", "0001", "00000001", "11000000", ""}, + input{"0100", "0100", "01000000", "11000000", ""}, + output{0x0001, DataType(0x0001), 0x0001, []byte{0x11}}, + }, + tagTest{ + input{"0001", "0001", "00000005", "00000010", "1112131415"}, + input{"0100", "0100", "05000000", "10000000", "1112131415"}, + output{0x0001, DataType(0x0001), 0x0005, []byte{0x11, 0x12, 0x13, 0x14, 0x15}}, + }, + tagTest{ + input{"0001", "0006", "00000001", "11000000", ""}, + input{"0100", "0600", "01000000", "11000000", ""}, + output{0x0001, DataType(0x0006), 0x0001, []byte{0x11}}, + }, + tagTest{ + input{"0001", "0006", "00000005", "00000010", "1112131415"}, + input{"0100", "0600", "05000000", "10000000", "1112131415"}, + output{0x0001, DataType(0x0006), 0x0005, []byte{0x11, 0x12, 0x13, 0x14, 0x15}}, + }, + //////////// int (2-byte) types //////////////// + tagTest{ + input{"0001", "0003", "00000002", "11111212", ""}, + input{"0100", "0300", "02000000", "11111212", ""}, + output{0x0001, DataType(0x0003), 0x0002, []byte{0x11, 0x11, 0x12, 0x12}}, + }, + tagTest{ + input{"0001", "0003", "00000003", "00000010", "111213141516"}, + input{"0100", "0300", "03000000", "10000000", "111213141516"}, + output{0x0001, DataType(0x0003), 0x0003, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16}}, + }, + tagTest{ + input{"0001", "0008", "00000001", "11120000", ""}, + input{"0100", "0800", "01000000", "11120000", ""}, + output{0x0001, DataType(0x0008), 0x0001, []byte{0x11, 0x12}}, + }, + tagTest{ + input{"0001", "0008", "00000003", "00000100", "111213141516"}, + input{"0100", "0800", "03000000", "00100000", "111213141516"}, + output{0x0001, DataType(0x0008), 0x0003, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16}}, + }, + //////////// int (4-byte) types //////////////// + tagTest{ + input{"0001", "0004", "00000001", "11121314", ""}, + input{"0100", "0400", "01000000", "11121314", ""}, + output{0x0001, DataType(0x0004), 0x0001, []byte{0x11, 0x12, 0x13, 0x14}}, + }, + tagTest{ + input{"0001", "0004", "00000002", "00000010", "1112131415161718"}, + input{"0100", "0400", "02000000", "10000000", "1112131415161718"}, + output{0x0001, DataType(0x0004), 0x0002, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}}, + }, + tagTest{ + input{"0001", "0009", "00000001", "11121314", ""}, + input{"0100", "0900", "01000000", "11121314", ""}, + output{0x0001, DataType(0x0009), 0x0001, []byte{0x11, 0x12, 0x13, 0x14}}, + }, + tagTest{ + input{"0001", "0009", "00000002", "00000011", "1112131415161819"}, + input{"0100", "0900", "02000000", "11000000", "1112131415161819"}, + output{0x0001, DataType(0x0009), 0x0002, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19}}, + }, + //////////// rational types //////////////////// + tagTest{ + input{"0001", "0005", "00000001", "00000010", "1112131415161718"}, + input{"0100", "0500", "01000000", "10000000", "1112131415161718"}, + output{0x0001, DataType(0x0005), 0x0001, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}}, + }, + tagTest{ + input{"0001", "000A", "00000001", "00000011", "1112131415161819"}, + input{"0100", "0A00", "01000000", "11000000", "1112131415161819"}, + output{0x0001, DataType(0x000A), 0x0001, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19}}, + }, + //////////// float types /////////////////////// + tagTest{ + input{"0001", "0005", "00000001", "00000010", "1112131415161718"}, + input{"0100", "0500", "01000000", "10000000", "1112131415161718"}, + output{0x0001, DataType(0x0005), 0x0001, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}}, + }, + tagTest{ + input{"0101", "000A", "00000001", "00000011", "1112131415161819"}, + input{"0101", "0A00", "01000000", "11000000", "1112131415161819"}, + output{0x0101, DataType(0x000A), 0x0001, []byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19}}, + }, +} + +func TestDecodeTag(t *testing.T) { + for i, tst := range set1 { + testSingle(t, binary.BigEndian, tst.big, tst.out, i) + testSingle(t, binary.LittleEndian, tst.little, tst.out, i) + } +} + +func testSingle(t *testing.T, order binary.ByteOrder, in input, out output, i int) { + data := buildInput(in, order) + buf := bytes.NewReader(data) + tg, err := DecodeTag(buf, order) + if err != nil { + t.Errorf("(%v) tag %v%+v decode failed: %v", order, i, in, err) + return + } + + if tg.Id != out.id { + t.Errorf("(%v) tag %v id decode: expected %v, got %v", order, i, out.id, tg.Id) + } + if tg.Type != out.typ { + t.Errorf("(%v) tag %v type decode: expected %v, got %v", order, i, out.typ, tg.Type) + } + if tg.Count != out.count { + t.Errorf("(%v) tag %v component count decode: expected %v, got %v", order, i, out.count, tg.Count) + } + if !bytes.Equal(tg.Val, out.val) { + t.Errorf("(%v) tag %v value decode: expected %v, got %v", order, i, out.val, tg.Val) + } +} + +// buildInputBig creates a byte-slice based on big-endian ordered input +func buildInput(in input, order binary.ByteOrder) []byte { + data := make([]byte, 0) + d, _ := hex.DecodeString(in.tgId) + data = append(data, d...) + d, _ = hex.DecodeString(in.tpe) + data = append(data, d...) + d, _ = hex.DecodeString(in.nVals) + data = append(data, d...) + d, _ = hex.DecodeString(in.offset) + data = append(data, d...) + + if in.val != "" { + off := order.Uint32(d) + for i := 0; i < int(off)-12; i++ { + data = append(data, 0xFF) + } + + d, _ = hex.DecodeString(in.val) + data = append(data, d...) + } + + return data +} + +func TestDecode(t *testing.T) { + name := filepath.Join(*dataDir, "sample1.tif") + f, err := os.Open(name) + if err != nil { + t.Fatalf("%v\n", err) + } + + tif, err := Decode(f) + if err != nil { + t.Fatal(err) + } + + t.Log(tif) +} + +func TestDecodeTag_blob(t *testing.T) { + buf := bytes.NewReader(data()) + buf.Seek(10, 1) + tg, err := DecodeTag(buf, binary.LittleEndian) + if err != nil { + t.Fatalf("tag decode failed: %v", err) + } + + t.Logf("tag: %v+\n", tg) + n, d, err := tg.Rat2(0) + if err != nil { + t.Fatalf("tag decoded wrong type: %v", err) + } + t.Logf("tag rat val: %v/%v\n", n, d) +} + +func data() []byte { + s1 := "49492A000800000002001A0105000100" + s1 += "00002600000069870400010000001102" + s1 += "0000000000004800000001000000" + + dat, err := hex.DecodeString(s1) + if err != nil { + panic("invalid string fixture") + } + return dat +} |