Initial Commit. Seems to work
This commit is contained in:
commit
7873d4a2a3
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Ignore the binary
|
||||
jpg-metadata
|
118
main.go
Normal file
118
main.go
Normal file
@ -0,0 +1,118 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/rwcarlsen/goexif/exif"
|
||||
)
|
||||
|
||||
var inJson bool
|
||||
var filename string
|
||||
|
||||
func init() {
|
||||
const (
|
||||
filenameUsage = "The File/Directory to scan"
|
||||
inJsonDefault = false
|
||||
inJsonUsage = "Output the result in JSON"
|
||||
)
|
||||
flag.StringVar(&filename, "filename", "", filenameUsage)
|
||||
flag.BoolVar(&inJson, "json", inJsonDefault, inJsonUsage)
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
fInfo, err := os.Lstat(filename)
|
||||
if err != nil {
|
||||
fmt.Println("Error reading passed file/directory")
|
||||
os.Exit(1)
|
||||
}
|
||||
if fInfo.IsDir() {
|
||||
ProcessDirectory(filename, inJson)
|
||||
} else {
|
||||
PrintJpegData(filename, inJson)
|
||||
}
|
||||
}
|
||||
|
||||
func ProcessDirectory(dirname string, inJson bool) {
|
||||
if !inJson {
|
||||
fmt.Println("Reading Directory:", dirname)
|
||||
}
|
||||
files, err := ioutil.ReadDir(dirname)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if !strings.HasSuffix(dirname, "/") {
|
||||
dirname += "/"
|
||||
}
|
||||
|
||||
if inJson {
|
||||
fmt.Print("[")
|
||||
}
|
||||
foundFirst := false
|
||||
for _, file := range files {
|
||||
if isJpeg(dirname+file.Name()) && inJson && foundFirst {
|
||||
fmt.Print(",")
|
||||
}
|
||||
if PrintJpegData(dirname+file.Name(), inJson) == nil {
|
||||
foundFirst = true
|
||||
if !inJson {
|
||||
fmt.Println("")
|
||||
}
|
||||
}
|
||||
}
|
||||
if inJson {
|
||||
fmt.Print("]")
|
||||
}
|
||||
}
|
||||
|
||||
func isJpeg(filename string) bool {
|
||||
nm := strings.ToUpper(filename)
|
||||
return strings.HasSuffix(nm, ".JPG") || strings.HasSuffix(nm, ".JPEG")
|
||||
}
|
||||
|
||||
func PrintJpegData(filename string, inJson bool) error {
|
||||
if !isJpeg(filename) {
|
||||
return errors.New("Not a JPEG")
|
||||
}
|
||||
exif, err := ReadExifData(filename)
|
||||
if err != nil {
|
||||
if !inJson {
|
||||
fmt.Println("Error: " + err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
if inJson {
|
||||
fmt.Print("{\"Filename\":\"" + filename + "\",\"Exif\":")
|
||||
if exif == nil {
|
||||
fmt.Print("{}")
|
||||
} else {
|
||||
json, err := exif.MarshalJSON()
|
||||
if err != nil {
|
||||
fmt.Print("{}")
|
||||
}
|
||||
fmt.Print(string(json))
|
||||
}
|
||||
fmt.Print("}")
|
||||
} else {
|
||||
fmt.Println("= " + filename + " =")
|
||||
fmt.Println(exif)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReadExifData(filename string) (*exif.Exif, error) {
|
||||
f, err := os.Open(filename)
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err.Error())
|
||||
return &exif.Exif{}, err
|
||||
}
|
||||
defer f.Close()
|
||||
return exif.Decode(f)
|
||||
}
|
Loading…
Reference in New Issue
Block a user