6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Go言語で画像ファイルか確認してみる

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")
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
6
Help us understand the problem. What are the problem?