LoginSignup
3

More than 5 years have passed since last update.

【Python】imghdrでJPEGファイルが正しく判定されない

Posted at

はじめに

画像形式の取得には imghdr というパッケージが便利なのですが、たまにjpgファイルが正しく判定されないので困ってました。

うまく判定されない画像の例
ドラえもんの画像 1
ドラえもんの画像 2

imghdr

imghdrのソースコードを覗いてみると、jpgの判定は以下の関数で行っていることがわかります。

def test_jpeg(h, f):
    """JPEG data in JFIF or Exif format"""
    if h[6:10] in (b'JFIF', b'Exif'):
        return 'jpeg'

どうやら、判定がうまく行かなかったファイルでは'JFIF'や'Exif'が正しい位置にはなかったようです。

解決方法

jpgファイルには、ファイル先頭が必ず FFD8 で始まる、というお約束があるのでそれを利用します。(なぜ imghdr がこの方法を取らないのかは気になるところです。)

def is_jpg(byte):
    return byte[:2] == b'\xff\xd8'

短すぎて関数化する必要無い気もしますが、とりあえずこれでjpgファイルが正しく判定できるようになりました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3