【Windows】Pythonをインストールする
MAX
MAX999blog
JPEG(JPG)画像はEXIF情報と言うものを保持しており、その中に画像の回転角度の情報(元の画像を回転させた角度)も保持している。
画像をアップロードしたりするWEBアプリを作成する際に、EXIF情報を意識せずに作成した場合、アップロードした画像が思わぬ方向に回転していたりする。
サーバ側で正しい角度で、画像を一度保存することで、その後の処理では、画像の回転角度を意識することなく処理を行っていくことができる。
1from PIL import Image
2
3def main():
4
5#画像ファイルを開く
6img_tmp = Image.open(img_file_path)
7
8try:
9 #exif情報取得
10 exifinfo = img_tmp._getexif()
11 #exif情報からOrientationの取得
12 orientation = exifinfo.get(0x112, 1)
13 #画像を回転
14 img_tmp_rotate = rotateImage(img_tmp, orientation)
15 #回転した画像を保存(元の画像に上書き)
16 img_tmp_rotate.save(img_file_path)
17except:
18 #exif情報が取得できなかった場合は、そのまま処理を続ける
19 #ホントは拡張子でexifを取得する、しないを判別した方がいいかもしれない。
20 pass
Imageをimportすれば、そのままexif情報も取得できる。
1def rotateImage(img, orientation):
2 """
3 画像ファイルをOrientationの値に応じて回転させる
4 """
5 #orientationの値に応じて画像を回転させる
6 if orientation == 1:
7 pass
8 elif orientation == 2:
9 #左右反転
10 img_rotate = img.transpose(Image.FLIP_LEFT_RIGHT)
11 elif orientation == 3:
12 #180度回転
13 img_rotate = img.transpose(Image.ROTATE_180)
14 elif orientation == 4:
15 #上下反転
16 img_rotate = img.transpose(Image.FLIP_TOP_BOTTOM)
17 elif orientation == 5:
18 #左右反転して90度回転
19 img_rotate = img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Image.ROTATE_90)
20 elif orientation == 6:
21 #270度回転
22 img_rotate = img.transpose(Image.ROTATE_270)
23 elif orientation == 7:
24 #左右反転して270度回転
25 img_rotate = img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Image.ROTATE_270)
26 elif orientation == 8:
27 #90度回転
28 img_rotate = img.transpose(Image.ROTATE_90)
29 else:
30 pass
31
32 return img_rotate
Orientationは値によって回転や反転が行われているため、その回転・反転を戻すように回転させる。