python で imghdr による画像形式の判定する方法のメモ。
ここでは画像ファイル名で画像を指定した場合と、画像データを指定した場合の判定方法を検証します。
import sys import io import imghdr def read_image_file(image_file): image = None with open(image_file, 'rb') as inst: image = inst.read() return image def main(): image_file = sys.argv[1] # 画像ファイルで判定 res = imghdr.what(image_file) print(f'image file: {res}') # 画像バイトデータで判定 image = read_image_file(image_file) res = imghdr.what(io.BytesIO(image)) print(f'image data: {res}') return 0 if __name__ == '__main__': res = main() exit(res)
jpg ファイル、png ファイルの画像判定結果では、それぞれ正しく判定しています。
$ python test_imghdr.py jpg1.jpg image file: jpeg image data: jpeg $ python test_imghdr.py png1.png image file: png image data: png
jpg ファイルの拡張子を png に変更しても、正しく判定することができます。
$ python test_imghdr1.py jpg1.png image file: jpeg image data: jpeg