func tagFormatString(tag *tiff.Tag) string { switch tag.Format() { case tiff.IntVal: return "int" case tiff.RatVal: return "rat" case tiff.FloatVal: return "float" case tiff.StringVal: return "string" } return "" }
func parse3Rat2(tag *tiff.Tag) ([3]float64, error) { v := [3]float64{} for i := range v { num, den, err := tag.Rat2(i) if err != nil { return v, err } v[i] = ratFloat(num, den) if tag.Count < uint32(i+2) { break } } return v, 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") } }
func (_ Walker) Walk(name exif.FieldName, tag *tiff.Tag) error { data, _ := tag.MarshalJSON() fmt.Printf(" %v: %v\n", name, string(data)) return nil }