diff --git a/examples/main.go b/examples/main.go index fb76e4f..f956fcc 100644 --- a/examples/main.go +++ b/examples/main.go @@ -2,17 +2,12 @@ package main import ( "fmt" - "os" imageType "github.com/mushroomsir/image-type" ) func main() { - file, _ := os.Open("../testdata/test.jpg") - - bytes := make([]byte, 256) - file.Read(bytes) - res, err := imageType.Parse(bytes) + res, err := imageType.ParsePath("../testdata/test.jpg") if err == nil { fmt.Println(res.Type) // jpg fmt.Println(res.MimeType) // image/jpeg diff --git a/image.go b/image.go index 68a6c9d..6576bba 100644 --- a/image.go +++ b/image.go @@ -4,6 +4,7 @@ import ( "bufio" "errors" "io" + "os" ) // ImageInfo ... @@ -14,10 +15,33 @@ type ImageInfo struct { Height int } +var headerLength = 256 + +// ParsePath ... +func ParsePath(filePath string) (img *ImageInfo, err error) { + file, err := os.Open(filePath) + if err != nil { + return nil, err + } + bytes := make([]byte, headerLength) + file.Read(bytes) + return Parse(bytes) +} + +// ParseFile ... +func ParseFile(file *os.File) (img *ImageInfo, err error) { + bytes := make([]byte, headerLength) + _, err = file.Read(bytes) + if err != nil { + return + } + return Parse(bytes) +} + // ParseReader ... func ParseReader(rd io.Reader) (img *ImageInfo, err error) { br := bufio.NewReader(rd) - bytes, err := br.Peek(256) + bytes, err := br.Peek(headerLength) if err != nil { return } diff --git a/image_test.go b/image_test.go index f2f1eac..c5430f2 100644 --- a/image_test.go +++ b/image_test.go @@ -9,10 +9,7 @@ import ( func TestJPEG(t *testing.T) { assert := assert.New(t) - file, _ := os.Open("testdata/test.jpg") - bytes := make([]byte, 256) - file.Read(bytes) - res, err := Parse(bytes) + res, err := ParsePath("testdata/test.jpg") if assert.Nil(err) { assert.Equal("jpg", res.Type) assert.Equal("image/jpeg", res.MimeType) @@ -23,9 +20,7 @@ func TestJPEG(t *testing.T) { func TestPng(t *testing.T) { assert := assert.New(t) file, _ := os.Open("testdata/test.png") - bytes := make([]byte, 256) - file.Read(bytes) - res, err := Parse(bytes) + res, err := ParseFile(file) if assert.Nil(err) { assert.Equal("png", res.Type) assert.Equal("image/png", res.MimeType) @@ -37,9 +32,7 @@ func TestPng(t *testing.T) { func TestGif(t *testing.T) { assert := assert.New(t) file, _ := os.Open("testdata/test.gif") - bytes := make([]byte, 256) - file.Read(bytes) - res, err := Parse(bytes) + res, err := ParseReader(file) if assert.Nil(err) { assert.Equal("gif", res.Type) assert.Equal("image/gif", res.MimeType)