Как я могу восстановить данные EXIF ​​после изменения размера изображения с помощью PIL? - PullRequest
3 голосов
/ 27 октября 2010

Этот вопрос задавался до , но на него ответили несколько лет назад, и ответ относится к неработающей ссылке и, вероятно, больше не является лучшим методом.

pyxiv2 выглядит так, как будто это сделает задачу, но у нее много зависимостей для, казалось бы, простой задачи.

Я также хотел бы знать, какие значения больше не будут действительны для изображения с измененным размером. Ширина и высота очевидны.

1 Ответ

3 голосов
/ 24 ноября 2010

На случай, если кто-то захочет использовать piexiv2, вот решение: размер изображения изменяется с использованием библиотеки PIL, данные EXIF, скопированные с pyexiv2, и поля EXIF ​​размера изображения устанавливаются с новым размером.

import pyexiv2
import tempfile
from PIL import Image


def resize_image(source_path, dest_path, size):
    # resize image
    image = Image.open(source_path)
    image.thumbnail(size, Image.ANTIALIAS)
    image.save(dest_path, "JPEG")

    # copy EXIF data
    source_image = pyexiv2.Image(source_path)
    source_image.readMetadata()
    dest_image = pyexiv2.Image(dest_path)
    dest_image.readMetadata()
    source_image.copyMetadataTo(dest_image)

    # set EXIF image size info to resized size
    dest_image["Exif.Photo.PixelXDimension"] = image.size[0]
    dest_image["Exif.Photo.PixelYDimension"] = image.size[1]
    dest_image.writeMetadata()

# resizing local file
resize_image("41965749.jpg", "resized.jpg", (600,400))
...