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  }