gpt4 book ai didi

python - 缩小图像时保留时间戳

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:57 25 4
gpt4 key购买 nike

我的数码相机拍摄的照片分辨率非常高,我有一个 PIL 脚本可以将它们缩小到 800x600(或 600x800)。但是,生成的文件最好保留原始时间戳。我在文档中注意到我可以在 PIL 的图像保存方法中使用文件对象而不是名称,但我不知道这是否有帮助。

我的代码基本上是 name, ext = os.path.splitext(文件名)

# open an image file (.bmp,.jpg,.png,.gif) you have in the working folder
image = Image.open(filename)

width = 800
height = 600

w, h = image.size
if h > w:
width = 600
height = 800

name = name + ".jpg"
shunken = image.resize((width, height), Image.ANTIALIAS)
shunken.save(name)

感谢您提供的任何帮助!

最佳答案

使用shutil.copystat

PIL 似乎不保存 EXIF 元数据。要使用 Python 复制 EXIF 数据,您可以使用 pyexiv2 .这是如何Phatch ,一个用 Python 编写的批量照片缩放程序,例如处理 EXIF 数据。

我不确定你是否使用 Ubuntu,但如果是这样,安装很容易,因为 pyexiv2python-pyexiv2 包提供。

编辑:如果您不介意丢失 EXIF 元数据,并且只想使用 EXIF 日期时间戳作为调整大小的图像的修改日期,那么您可以不使用 pyexiv2 包,从而为您节省了额外的依赖。方法如下:

import os
import time
import Image
import ExifTags # This is provided by PIL
img=Image.open(filename,'r')

PIL 可以读取 EXIF 数据,但还不能写入 EXIF 数据。我们可以使用 _getexif() 方法访问数据:

d = dict((ExifTags.TAGS[k], v) for k, v in img._getexif().items())
print(d['DateTimeOriginal'])

解析时间戳可能取决于相机使用的格式。这适用于我的相机; YMMV。 dateutils package 允许您解析各种各样的时间戳,而无需预先指定格式,但这是另一回事了。

timestamp=time.strptime(d['DateTimeOriginal'],"%Y:%m:%d %H:%M:%S")

这是交换宽度和高度的替代方法:

w, h = img.size
width,height = 800,600
if h > w: width,height = height,width

调整图像大小,并使用 os.utime 修复 atime 和 mtime:

filename = filename + "-800x600.jpg"
shunken = img.resize((width, height), Image.ANTIALIAS)
shunken.save(filename)
st = os.stat(filename)
os.utime(filename,(st.st_atime,time.mktime(timestamp)))

关于python - 缩小图像时保留时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com