64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"image"
|
|
"image/jpeg"
|
|
"image/png"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/rwcarlsen/goexif/exif"
|
|
"github.com/rwcarlsen/goexif/tiff"
|
|
"golang.org/x/image/bmp"
|
|
"golang.org/x/image/webp"
|
|
)
|
|
|
|
func CheckFilePath(name string) string {
|
|
if _, err := os.Stat(name); err == nil {
|
|
return name
|
|
}
|
|
panic(fmt.Errorf("%v does not exist in any directory which contains in $GOPATH", name))
|
|
}
|
|
|
|
func ReadIMG(name string) (img image.Image, orientation *tiff.Tag, err error) {
|
|
file, err := os.Open(CheckFilePath(name))
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
x, err := exif.Decode(file)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
orientation, err = x.Get(exif.Orientation)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
file, err = os.Open(CheckFilePath(name))
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
parts := strings.Split(name, ".")
|
|
switch strings.ToLower(parts[len(parts)-1]) {
|
|
case "jpg":
|
|
fallthrough
|
|
case "jpeg":
|
|
img, err = jpeg.Decode(file)
|
|
case "png":
|
|
img, err = png.Decode(file)
|
|
case "bmp":
|
|
img, err = bmp.Decode(file)
|
|
case "webp":
|
|
img, err = webp.Decode(file)
|
|
}
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
return img, orientation, nil
|
|
}
|