在Python中旋转具有EXIF中指定方向的图像,不使用PIL包括缩略图。

14 浏览
0 Comments

在Python中旋转具有EXIF中指定方向的图像,不使用PIL包括缩略图。

我有以下情况:

  • 我从iPhone发送图像以及EXIF信息到我的Python套接字服务器。
  • 我需要根据图像拍摄时的实际方向正确定位图像。我知道IOS始终将图像保存为横向左侧,并添加实际方向作为EXIF字段(EXIF.Image.Orientation)。
  • 我正在读取EXIF字段以查看实际方向。然后我使用wxpython将图像旋转到正确的方向。

我使用pyexiv2进行EXIF操作。

问题:使用wxpython旋转图像时,包括缩略图在内的EXIF信息丢失。

我做了什么:在旋转图像之前,我读取EXIF。我重置了EXIF中的方向字段。然后在旋转后将其放回。

问题:

EXIF中的缩略图没有旋转。因此,图像和缩略图具有不同的方向。

问题?

除了PIL之外,是否有其他模块可以旋转图像并保留其EXIF信息?

是否有专门用于缩略图方向的EXIF字段?

是否有办法只旋转缩略图?

谢谢你的帮助...

0
0 Comments

问题出现的原因是:使用Pillow库的版本大于等于6.0.0时,可以使用内置的ImageOps.exif_transpose函数根据图片的exif标签正确旋转图片。但是,当尝试使用这个函数时,出现了"AttributeError: module 'PIL.ImageOps' has no attribute 'exif_transpose'"的错误。

解决方法是:更新Pillow库的版本至6.0.0以上。然后,使用以下代码来旋转图片:

from PIL import ImageOps
image = ImageOps.exif_transpose(image)

需要注意的是,这个函数对于tif格式的图片不起作用。如果遇到这种情况,可以参考链接https://github.com/python-pillow/Pillow/issues/4346中的评论。另外,在使用.png格式的图片时,如果上述方法不起作用,可以参考plhn评论链接(需要PIL 7.0版本)。

0
0 Comments

问题的出现原因是:当图片被拍摄时,根据设备的方向,图片的EXIF信息中会包含一个方向标签。然而,有时候这些图片的方向并不正确,需要根据EXIF信息进行旋转。

解决方法如下:

1. 导入所需的库:PIL和ExifTags。

2. 使用try-except结构处理异常情况。

3. 打开图片并获取其EXIF信息。

4. 遍历EXIF信息,找到方向标签。

5. 根据方向标签的值,进行相应的旋转操作。

6. 保存旋转后的图片并关闭。

7. 如果图片没有EXIF信息,或者无法获取EXIF信息,则跳过处理。

8. 最后,通过判断图片的EXIF信息中的方向值,确定图片是否需要进行旋转。

代码示例:

from PIL import Image, ExifTags
try:
    image = Image.open(filepath)
    for orientation in ExifTags.TAGS.keys():
        if ExifTags.TAGS[orientation] == 'Orientation':
            break
    exif = image._getexif()
    if exif[orientation] == 3:
        image = image.rotate(180, expand=True)
    elif exif[orientation] == 6:
        image = image.rotate(270, expand=True)
    elif exif[orientation] == 8:
        image = image.rotate(90, expand=True)
    image.save(filepath)
    image.close()
except (AttributeError, KeyError, IndexError):
    pass

在上述解决方法中,使用了PIL库来处理图片,并使用ExifTags库来获取图片的EXIF信息。首先,通过打开图片并获取其EXIF信息,然后根据方向标签的值进行相应的旋转操作,最后保存旋转后的图片。如果图片没有EXIF信息,或者无法获取EXIF信息,则直接跳过处理。

在代码示例中,使用了try-except结构来处理异常情况。首先导入所需的库,然后使用try来执行主要的旋转操作。如果在执行过程中出现了AttributeError、KeyError或IndexError的异常,则直接跳过处理。这样可以避免程序因为异常而中断运行。

通过这种方法,可以根据图片的EXIF信息来旋转图片,从而使图片方向正确显示。

0
0 Comments

问题的原因是需要在不使用PIL库的情况下,使用Python旋转带有EXIF指定方向的图像,并包括缩略图。解决方法是使用图像的transpose方法根据EXIF中的方向信息进行旋转,并保存旋转后的图像。

具体步骤如下:

1. 导入所需的模块和库。

2. 打开图像文件。

3. 遍历图像的EXIF标签,找到包含方向信息的标签。

4. 获取图像的EXIF信息,并将其保存在字典中。

5. 根据方向信息进行旋转:

- 如果方向为3,则旋转180度。

- 如果方向为6,则旋转270度。

- 如果方向为8,则旋转90度。

6. 保存旋转后的图像文件。

7. 关闭图像文件。

如果图像没有EXIF信息或无法获取EXIF信息,则会捕获异常并继续执行下一步操作。

最后,某些情况下希望能够设置transpose方法中的expand参数为False,但是没有找到如何实现。其他人建议在之前的回答中进行评论,而不是提供一个完全不同的答案。

这个方法看起来很好,并且完美地工作,只是我找不到如何将expand参数设置为False,有没有办法通过transpose方法实现这个功能呢?

最后有人建议在之前的回答中进行评论,而不是提供一个完全不同的答案。对此,提问者表示抱歉,并表示会记住这一点。

以上就是解决在Python中不使用PIL库旋转带有EXIF指定方向的图像的方法。

0