Go言語で画像ファイルか確認する
Go言語で書かれたサーバーサイドで
アップロードされたファイルが画像ファイルか確認する必要があったため今後の備忘録として記載します。
imageパッケージを使用する
imageパッケージを使用することで簡単にできます。
main.go
import(
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"os"
)
func main(){
f, _ := os.Open("path/to/image")
defer f.Close()
_, format, err := image.DecodeConfig(f)
if err != nil {
// 画像フォーマットではない場合はエラーが発生する
fmt.Println(err)
return
}
// pngファイルの場合はformatがpng
// jpegファイルの場合はformatがjpg
// gifファイルの場合はformatがgif
fmt.Println(format)
}
拡張
下記パッケージを使用することにより、より広い範囲で画像判定を行うことができます。
importする箇所で下記のように追加することでbitmapやtiff形式の画像ファイルにも対応できます。
import(
"image"
_ "golang.org/x/image/bmp"
_ "golang.org/x/image/tiff"
)
現状ではこれで十分なため、これ以上の調査は行っていませんが、
もし新たに画像フォーマットの対応が必要になれば根性出して自分でコードを
書けば拡張できるようになっているのがimageパッケージのいいとこかなと思います。
追記
@matsumatsu20 さんから編集依頼をいただいたためコードを修正しました。
ありがとうございます!
// f, _ := f.Open("path/to/image")
f, _ := os.Open("path/to/image")