Python PILで読み取った画像が自動回転する実現方法
携帯電話やカメラなどの機器で撮影された写真は、手に持つ方向によっては0°、90°、180°、270°回転することがあります。コンピュータ上でソフトウェアを利用して正の位置に変えても、彼らのexif情報の中には方位情報が残っています。
これらの画像をPILで読み取った場合、元のデータを読み取っています。つまり、パソコンの画面に正常な写真が表示されていても、PILで読み取っても、回転する画像かもしれません。また、画像のsizeは画面とは違っているかもしれません。
この場合、PILを利用してexifのorentation情報を読み取り、この情報に基づいて画像を正にしてから、後続の動作を行うことができます。具体的には以下の通りです。
詳細は参照してください。https://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
これらの画像をPILで読み取った場合、元のデータを読み取っています。つまり、パソコンの画面に正常な写真が表示されていても、PILで読み取っても、回転する画像かもしれません。また、画像のsizeは画面とは違っているかもしれません。
この場合、PILを利用してexifのorentation情報を読み取り、この情報に基づいて画像を正にしてから、後続の動作を行うことができます。具体的には以下の通りです。
from PIL import Image, ExifTags
img = Image.open(file)
try:
for orientation in ExifTags.TAGS.keys() :
if ExifTags.TAGS[orientation]=='Orientation' : break
exif=dict(img._getexif().items())
if exif[orientation] == 3 :
img=img.rotate(180, expand = True)
elif exif[orientation] == 6 :
img=img.rotate(270, expand = True)
elif exif[orientation] == 8 :
img=img.rotate(90, expand = True)
except:
pass
ちなみに、ここではrotateの「expand=True」は画像サイズも対応して変換されます。この文を加えないとsizeは変わりません。詳細は参照してください。https://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。