最近正在搭一个新的wordpress站,用于展示我拍过的玩具照片。在整理并上传过去的照片的时候,我发现,上传之后的照片会逆时针90度显示,在网上查了一下发现这是因为图片EXIF中的Orientation导致的。一般图片里的Orientation为1,或者并没有这个值,而iPhone拍出来的照片就会存在这个值,使得图片以正确的方向在手机里显示,而浏览器中并不会根据Orientation来调整显示的方向。因此,为了让照片在浏览器里正确显示,我用Pillow修改了Orientation并旋转图片。同时需要注意的是,直接保存图片会改变图片的色彩配置,原图是Display P3,保存后变成了sRGB,色彩饱和度有一定区别,所以需要加上icc_profile这一项。不过保存后的图片文件变得更大了,不知道为什么,不过影响不大。
from PIL import Image def modify_orientation(jpg): img = Image.open(path + jpg) icc_profile = img.info.get('icc_profile') exif = img.getexif() if exif[274] == 6: exif[274] = 1 img = img.transpose(Image.ROTATE_270) img.save(path + jpg, exif=exif, quality=95, icc_profile=icc_profile)
由于浏览器中不能直接显示HEIC照片,所以我是先转换成jpeg格式的(Mac下自带的功能),不过转换之后的文件修改日期就变了,我希望把它变回HEIC原本的时间,于是就有了下面这一段代码。
import os def modify_time(heic, jpg): stheic = os.stat(path + filename) stjpg = os.stat(path + jpg) if stheic.st_mtime != stjpg.st_mtime: os.utime(path + jpg, (stheic.st_atime, stheic.st_mtime))