Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

スマホで撮った写真が横を向いてしまう(Python Kivyの取説・使い方 番外編)

はじめに

前回の画面のスライドで、なぜか縦向きの写真が横を向いてしまう問題を調べていきます。

スマホで撮った写真などは、画像ファイルの中に撮影した日付、位置情報、写真の向きなどのデータが格納されています。そのデータのことを「Exif」というらしいです。

今回はPILモジュールを使用して「Exif情報の取得」と「画像の回転」を行います。

 

f:id:Start_python:20191220104044p:plain

f:id:Start_python:20191220104101p:plain

Exif情報のOrientationが「6」のとき、写真は左に90度向いてしまいます。

(Orientationが「8」のときは右に90度、Orientationが「3」のときは180度回転してしまうようです)

 

プログラムのコード

from PIL import Image
from PIL.ExifTags import TAGS

#画像ファイルを開く
image = Image.open('./image/IMG_0.jpg')

#exif情報を取得
exif = image._getexif()

#exif情報からOrientationを取得
exif_data = []
for id, value in exif.items():
    if TAGS.get(id) == 'Orientation':
        tag = TAGS.get(id, id),value
        exif_data.extend(tag)

print(exif_data)
#image.show()

input(exif_data)

if exif_data[1] == 3:
    #180度回転
    image = image.transpose(Image.ROTATE_180)
elif exif_data[1] == 6:
    #270度回転
    image = image.transpose(Image.ROTATE_270)
elif exif_data[1] == 8:
    #90度回転
    image = image.transpose(Image.ROTATE_90)

image.show()

 

f:id:Start_python:20191220105040p:plain

 

まとめ

とりあえず画像の回転で縦向きに直すことができました。詳しい解説は省きますがこれでkivyを使って写真の向きを正しく表示できそうです。

 

 

 

保存ファイル

lesson64.py

test.kv

 

 

文責:Luke