| """ |
| This script handles the skimage exif problem. |
| """ |
|
|
| from PIL import Image |
| import numpy as np |
|
|
| ORIENTATIONS = { |
| 2: (Image.FLIP_LEFT_RIGHT,), |
| 3: (Image.ROTATE_180,), |
| 4: (Image.FLIP_TOP_BOTTOM,), |
| 5: (Image.FLIP_LEFT_RIGHT, Image.ROTATE_90), |
| 6: (Image.ROTATE_270,), |
| 7: (Image.FLIP_LEFT_RIGHT, Image.ROTATE_270), |
| 8: (Image.ROTATE_90,) |
| } |
|
|
|
|
| def open_oriented_im(im_path): |
| im = Image.open(im_path) |
| if hasattr(im, '_getexif'): |
| exif = im._getexif() |
| if exif is not None and 274 in exif: |
| orientation = exif[274] |
| im = apply_orientation(im, orientation) |
| img = np.asarray(im).astype(np.float32) / 255. |
| if img.ndim == 2: |
| img = img[:, :, np.newaxis] |
| img = np.tile(img, (1, 1, 3)) |
| elif img.shape[2] == 4: |
| img = img[:, :, :3] |
| return img |
|
|
|
|
| def apply_orientation(im, orientation): |
| if orientation in ORIENTATIONS: |
| for method in ORIENTATIONS[orientation]: |
| im = im.transpose(method) |
| return im |
|
|