7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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ファイルが正しく判定できるようになりました。

7
3
3

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
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?