たまたま見つけたので、メモしておく。
cf. Go言語で画像ファイルか確認してみる – Qiita
画像を扱うには image パッケージを利用する。が、具体的なフォーマットを扱うにはそれぞれに対応したパッケージの import が必要。直接には使わないけど image パッケージの関数で内部的に使われる。注意しなきゃいけないのは、普通に import すると、インポートしてるのに使ってないぞエラーが出ること。そこで下のコードのように、パッケージ名の前に _ をつけている。
package main
import (
"fmt"
"os"
"image"
_ "image/jpeg"
_ "image/png"
_ "image/gif"
_ "golang.org/x/image/bmp"
_ "golang.org/x/image/tiff"
)
func main() {
f, err := os.Open(os.Args[1])
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
_, format, err := image.DecodeConfig(f)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(format)
}
それから、標準で対応しているのは、JPEG, PNG, GIF のみ。ほかに BMP と TIFF が外部のパッケージを導入すれば対応できる。こんなふうに。
^o^ > go get golang.org/x/image/bmp ^o^ > go get golang.org/x/image/tiff
で、実行例。
^o^ > go run imgcheck.go sample.jpg jpeg ^o^ > go run imgcheck.go sample.png png ^o^ > go run imgcheck.go sample.bmp bmp