手机竖拍的照片上传后显示成横向,点开原图又是正的。乍看像缓存或者权限的锅,追下去往往不是。
from PIL import Image, ImageOps
img = ImageOps.exif_transpose(Image.open('a.jpg'))
img.save('out.jpg')
追下去是这么回事:图片带有方向标记,处理库读取像素时没有按标记旋转。
「图片方向」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,读取方向标记并旋转像素;处理完成后清除该标记;统一输出标准方向。
验收就看一点,上传后的图片方向与拍摄时一致。