Spaces:
Running
on
Zero
Running
on
Zero
import numpy as np | |
import PIL.Image | |
import PIL.ImageOps | |
def exif_transpose(img): | |
if not img: | |
return img | |
exif_orientation_tag = 274 | |
# Check for EXIF data (only present on some files) | |
if ( | |
hasattr(img, "_getexif") | |
and isinstance(img._getexif(), dict) | |
and exif_orientation_tag in img._getexif() | |
): | |
exif_data = img._getexif() | |
orientation = exif_data[exif_orientation_tag] | |
# Handle EXIF Orientation | |
if orientation == 1: | |
# Normal image - nothing to do! | |
pass | |
elif orientation == 2: | |
# Mirrored left to right | |
img = img.transpose(PIL.Image.FLIP_LEFT_RIGHT) | |
elif orientation == 3: | |
# Rotated 180 degrees | |
img = img.rotate(180) | |
elif orientation == 4: | |
# Mirrored top to bottom | |
img = img.rotate(180).transpose(PIL.Image.FLIP_LEFT_RIGHT) | |
elif orientation == 5: | |
# Mirrored along top-left diagonal | |
img = img.rotate(-90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT) | |
elif orientation == 6: | |
# Rotated 90 degrees | |
img = img.rotate(-90, expand=True) | |
elif orientation == 7: | |
# Mirrored along top-right diagonal | |
img = img.rotate(90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT) | |
elif orientation == 8: | |
# Rotated 270 degrees | |
img = img.rotate(90, expand=True) | |
return img | |
def load_image_file(file, mode="RGB"): | |
# Load the image with PIL | |
img = PIL.Image.open(file) | |
if hasattr(PIL.ImageOps, "exif_transpose"): | |
# Very recent versions of PIL can do exit transpose internally | |
img = PIL.ImageOps.exif_transpose(img) | |
else: | |
# Otherwise, do the exif transpose ourselves | |
img = exif_transpose(img) | |
img = img.convert(mode) | |
return np.array(img) | |