Python PIL自动修正图像EXIF旋转方向的实现方法
本文详解如何利用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
以上内容为本文核心要点,旨在为读者提供实用的技术支持,欢迎持续关注本站以获取更多技术资讯。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













