// Walk implements exif.Walker interface and initializes the Photograph // from the EXIF data. func (p *Photograph) Walk(field exif.FieldName, tag *tiff.Tag) error { logging.Log.Info("%v: %v", field, tag) p.ExifMap[field] = tag if "DateTime" == field { const timeFormat = "2006:01:02 15:04:05" s, err := tag.StringVal() if err != nil { return err } p.Time, err = time.Parse(timeFormat, s) if err != nil { return err } } return nil }
func tagDegrees(tag *tiff.Tag) (float64, error) { switch tag.Format() { case tiff.RatVal: // The usual case, according to the Exif spec // (http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf, // sec 4.6.6, p. 52 et seq.) v, err := parse3Rat2(tag) if err != nil { return 0.0, err } return v[0] + v[1]/60 + v[2]/3600.0, nil case tiff.StringVal: // Encountered this weird case with a panorama picture taken with a HTC phone s, err := tag.StringVal() if err != nil { return 0.0, err } return parseTagDegreesString(s) default: // don't know how to parse value, give up return 0.0, fmt.Errorf("Malformed EXIF Tag Degrees") } }