github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/filesystem/exif.go (about) 1 // Package filesystem - Content managed by Project Forge, see [projectforge.md] for details. 2 package filesystem 3 4 import ( 5 "strings" 6 7 "github.com/dsoprea/go-exif/v3" 8 "github.com/pkg/errors" 9 "github.com/samber/lo" 10 11 "github.com/kyleu/dbaudit/app/util" 12 ) 13 14 func ExifExtract(b []byte) (util.ValueMap, error) { 15 x, err := exif.SearchAndExtractExif(b) 16 if err != nil { 17 return nil, errors.Wrapf(err, "unable to extract exif data") 18 } 19 entries, _, err := exif.GetFlatExifDataUniversalSearch(x, nil, true) 20 if err != nil { 21 return nil, errors.Wrapf(err, "unable to extract exif data") 22 } 23 ret := lo.SliceToMap(entries, func(t exif.ExifTag) (string, any) { 24 return t.TagName, strings.TrimSuffix(strings.TrimPrefix(t.Formatted, "["), "]") 25 }) 26 return ret, nil 27 } 28 29 func ImageType(path ...string) string { 30 if len(path) == 0 { 31 return "" 32 } 33 ext := path[len(path)-1] 34 if !strings.Contains(ext, ".") { 35 return "" 36 } 37 t := ext[strings.LastIndex(ext, ".")+1:] 38 switch t { 39 case "bmp", "gif", "jpg", "jpeg", "png": 40 return t 41 default: 42 return "" 43 } 44 }