スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス6期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

Rubyで画像ファイルの形式(gif, png, jpg)を判定する

※提携先の広告(リンク、バナー等)を含む場合があります


Rubyで画像ファイルの形式(gif, png, jpg)を判定する


こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、

画像ファイルの形式をバリデーションする必要があったので、

備忘録として残しておきます。


Rubyで画像ファイルの形式(gif, png, jpg)を判定する


今回の例では、


  • Base64でエンコードされた、画像のバイナリ文字列


が渡ってくることを想定します。


ファイル名の拡張子で判定はしません。


画像が持つバイナリデータから判定します。


【結論】


def image_type!(encoded_str)
  raise if encoded_str.nil?

  decoded_str = Base64.decode64(encoded_str)
  case decoded_str
  when /GIF8[79]a/n
    return 'gif'
  when /\x89PNG/n
    return 'png'
  when /\xFF\xD8/n
    return 'jpg'
  else
    raise
  end
end


〜処理の流れ〜


1.Base64でエンコードされた、画像のバイナリ文字列をデコードする

2.デコードしたバイナリ文字列に対し、正規表現を当てて、gif, png, jpgのいずれかであることを検証

3.マッチした拡張子を文字列で返す

※gif, png, jpg以外の画像形式の場合はエラー




以上、


  • Rubyで画像ファイルの形式(gif, png, jpg)を判定する


でした。