Использование shutil.copystat
Похоже, что PIL не сохраняет метаданные EXIF.
Для копирования данных EXIF с использованием Python вы можете использовать
pyexiv2 . Вот как Phatch , программа для изменения размера фотографий, написанная на Python, работает, например, с данными EXIF.
Я не уверен, используете ли вы Ubuntu, но если это так, установка проста, поскольку pyexiv2
предоставляется пакетом python-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
позволяет вам анализировать самые разные временные метки без необходимости предварительно указывать формат, но это уже другая история.
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)))