Python PIL自动修正图像EXIF旋转方向的实现方法

陆遥
陆遥
发布时间:2026-10-13| 4人浏览过
原创

本文详解如何利用Python PIL库读取图像EXIF中的Orientation信息,自动修正因拍摄角度导致的图像旋转问题。通过解析EXIF数据并调用rotate方法配合expand参数,确保图像在后续处理中保持正确的显示方向与尺寸。

图像EXIF旋转问题的背景

由手机、相机等移动设备拍摄的照片,因手持拍摄时的方向差异,生成的图像可能包含0°、90°、180°或270°的旋转角度。即便在电脑端使用软件将画面校正为正向,图像的EXIF元数据中仍会保留原始的方位记录。

使用PIL库读取此类图像时,获取的是未经方向校正的原始像素数据。这意味着,尽管在电脑屏幕上查看时图像显示正常,但通过PIL读取后,图像可能呈现旋转状态,且其尺寸(size)可能与屏幕显示的尺寸不一致。

PIL读取与方向校正原理

针对上述情况,可通过PIL读取图像EXIF中的Orientation字段,依据该字段值对图像进行旋转校正,完成转正后再执行后续处理流程。具体实现步骤如下。

代码实现:基于EXIF的自动旋转修正


from PIL import Image, ExifTags
img = Image.open(file)
try:
  for orientation in ExifTags.TAGS.keys() : 
    if ExifTags.TAGS[orientation]=='Orientation' : break 
  exif=dict(img._getexif().items())
  if  exif[orientation] == 3 : 
    img=img.rotate(180, expand = True)
  elif exif[orientation] == 6 : 
    img=img.rotate(270, expand = True)
  elif exif[orientation] == 8 : 
    img=img.rotate(90, expand = True)
except:
  pass

参数expand的作用说明

补充说明:在rotate方法中设置“expand = True”参数,可使图像尺寸随旋转角度自动调整。若省略该参数,图像尺寸将保持不变。

参考资源

相关技术细节可参考:https://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image

以上内容为本文核心要点,旨在为读者提供实用的技术支持,欢迎持续关注本站以获取更多技术资讯。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。