使用Python转换iPhone拍的照片

最近正在搭一个新的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))

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注