Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@derodero24

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

はじめに

画像形式の取得には 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ファイルが正しく判定できるようになりました。

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
3
Help us understand the problem. What are the problem?