Rubyで画像ファイルの種別を判定


Rubyで画像ファイルの種別を判定する方法です。

🐠 判定ロジック

  • JPEG => ファイルがffd8で始まり、ffd9で終わる
  • GIF => ファイルがGIFで始まり、3bで終わる
  • PNG => ファイルが89504e470d0a1a0aで始まり、0000000049454e44ae426082で終わる

😼 ソースコード

def image_type(file_path)
File.open(file_path, 'rb') do |f|
begin
header = f.read(8)
f.seek(-12, IO::SEEK_END)
footer = f.read(12)
rescue
return nil
end

if header[0, 2].unpack('H*') == %w(ffd8) && footer[-2, 2].unpack('H*') == %w(ffd9)
return 'jpg'
elsif header[0, 3].unpack('A*') == %w(GIF) && footer[-1, 1].unpack('H*') == %w(3b)
return 'gif'
elsif header[0, 8].unpack('H*') == %w(89504e470d0a1a0a) && footer[-12,12].unpack('H*') == %w(0000000049454e44ae426082)
return 'png'
end
end
nil
end

🐹 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍