code: def fix_orientation(img, save_over=False):
      
      path = None
      if not isinstance(img, Image.Image):
          path = img
          img = Image.open(path)
      elif save_over:
          raise ValueError("You can't use `save_over` when passing an Image instance.  Use a file path instead.")
      try:
          orientation = img._getexif()[EXIF_ORIENTATION_TAG]
      except (TypeError, AttributeError, KeyError):
          raise ValueError("Image file has no EXIF data.")
      if orientation in [3,6,8]:
          degrees = ORIENTATIONS[orientation][1]
          img = img.transpose(degrees)
          if save_over and path is not None:
              try:
                  img.save(path, quality=95, optimize=1)
              except IOError:
                  # Try again, without optimization (PIL can't optimize an image
                  # larger than ImageFile.MAXBLOCK, which is 64k by default).
                  # Setting ImageFile.MAXBLOCK should fix this....but who knows.
                  img.save(path, quality=95)
          return (img, degrees)
      else:
          return (img, 0)
docs: `img` can be an Image instance or a path to an image file.
      `save_over` indicates if the original image file should be replaced by the new image.
      * Note: `save_over` is only valid if `img` is a file path.