Modifies the Exif tag if rotation has been performed.

    0th, 1st
    --------
    ImageWidth = 256
    ImageLength = 257
    XResolution = 282
    YResolution = 283
    TileWidth = 322
    TileLength = 323

    Exif
    ----
    PixelXDimension = 40962
    PixelYDimension = 40963

    Args:
        exif (dict): The parsed Exif tag

    Returns:
        The modified Exif dict.

def update_exif_for_rotated_image(exif):
    """Modifies the Exif tag if rotation has been performed.

    0th, 1st
    --------
    ImageWidth = 256
    ImageLength = 257
    XResolution = 282
    YResolution = 283
    TileWidth = 322
    TileLength = 323

    Exif
    ----
    PixelXDimension = 40962
    PixelYDimension = 40963

    Args:
        exif (dict): The parsed Exif tag

    Returns:
        The modified Exif dict.

    """
    orientation_value = exif.get('0th', ).get(
        piexif.ImageIFD.Orientation, exif.get('1st', ).get(
            piexif.ImageIFD.Orientation, None))

    if orientation_value is not None:
        # Update orientation.
        exif['0th'][piexif.ImageIFD.Orientation] = 1
        if exif.get('1st', {}).get(piexif.ImageIFD.Orientation) is not None:
            exif['1st'][piexif.ImageIFD.Orientation] = 1

        # If 90 or 270 degree rotation, x dimensions are now y dimensions,
        # so flip all such properties.
        if orientation_value > 4:
            for exif_tag in ['0th', '1st']:
                if exif.get(exif_tag) is not None:
                    x, y = (exif.get(exif_tag).get(piexif.ImageIFD.ImageWidth),
                            exif.get(exif_tag).get(piexif.ImageIFD.ImageLength))
                    if x is not None and y is not None:
                        exif[exif_tag][piexif.ImageIFD.ImageWidth] = y
                        exif[exif_tag][piexif.ImageIFD.ImageLength] = x

                    x, y = (exif.get(exif_tag).get(piexif.ImageIFD.XResolution),
                            exif.get(exif_tag).get(piexif.ImageIFD.YResolution))
                    if x is not None and y is not None:
                        exif[exif_tag][piexif.ImageIFD.XResolution] = y
                        exif[exif_tag][piexif.ImageIFD.YResolution] = x

                    x, y = (exif.get(exif_tag).get(piexif.ImageIFD.TileWidth),
                            exif.get(exif_tag).get(piexif.ImageIFD.TileLength))
                    if x is not None and y is not None:
                        exif[exif_tag][piexif.ImageIFD.TileWidth] = y
                        exif[exif_tag][piexif.ImageIFD.TileLength] = x
            if exif.get('Exif') is not None:
                x, y = (exif.get('Exif').get(piexif.ExifIFD.PixelXDimension),
                        exif.get('Exif').get(piexif.ExifIFD.PixelYDimension))
                if x is not None and y is not None:
                    exif['Exif'][piexif.ExifIFD.PixelXDimension] = y
                    exif['Exif'][piexif.ExifIFD.PixelYDimension] = x
        if exif.get('thumbnail') is not None:
            try:
                thumbnail = pil_open(io.BytesIO(exif.get('thumbnail')))
                thumbnail = autorotate(thumbnail, orientation=orientation_value)
                with io.BytesIO() as bio:
                    thumbnail.save(bio, format='jpeg')
                    bio.seek(0)
                    exif['thumbnail'] = bio.read()
            except Exception as e:
                warnings.warn("deprecated", DeprecationWarning)

    return exif