Передача комментариев к новым комментариям после сжатия изображений - PullRequest
0 голосов
/ 08 ноября 2019

Здравствуйте. Я работаю над кодом, в котором изображение будет сжиматься и переносить комментарии из старого изображения в новое изображение. сжатие работает плавно, но передача комментариев в новом изображении не работает и не отображается в свойствах -> комментарии изображения.

Я также использую [pyexiv2] https://github.com/LeoHsiao1/pyexiv2 для чтения и записи метаданных

При первом запуске все работает нормально, но при последующих запусках комментарии не отображаются вСвойства изображения -> комментарии больше. Я пытался посмотреть на код, может быть, я просто что-то отредактировал случайно, но это не так.

import glob2
from PIL import Image, ImageDraw, ImageFont
import os
import pyexiv2


def getImgPaths():
    image_paths = glob2.glob('images/**/*.jpg')
    return image_paths

# ? copy metadata from original to new
def moveMetaData(base_image, new_image):

    print('***** Moving meta-data *****')

    i = pyexiv2.Image(base_image)

    meta_comment = i.read_exif()

    # ? print comment
    print("initial metacomment   : " + meta_comment["Exif.Photo.UserComment"]) 


    # ! encode comment to new image
    new_image_encode = pyexiv2.Image(new_image)
    #  print("New Image Initial Tags: " + str(new_image_encode))

    new_image_encode.modify_exif(
        {"Exif.Photo.UserComment": meta_comment["Exif.Photo.UserComment"]}) 


    o = new_image_encode.read_exif()

    print("Inserted Comment to new image   : " + o["Exif.Photo.UserComment"]) 


def compressImage(image_path):
    im = Image.open(image_path)
    image_name = os.path.basename(os.path.normpath(image_path))
    print('Input file size   : ', im.size)
    print('Input file name   : ', image_name)
    print('Input Image Size  : ', os.path.getsize(image_path))

    out_parent_dir = os.path.join('out', image_path.split(image_name)[0])
    print(out_parent_dir)

    newpath = os.path.join('out', image_path)

    if not os.path.exists(out_parent_dir):
        os.makedirs(out_parent_dir)

    im.save(os.path.join(out_parent_dir, image_name),
            optimize=True, quality=50)

    print('Success ' + image_path)

    # ? copy metadata to new image
    moveMetaData(image_path, newpath)



print('***** Compression Started *****')

for image_path in getImgPaths():
    try:
        compressImage(image_path)
    except Exception as e:
        print(e)
        with open('logs/errors.txt', 'a') as fh:
            print(str(e) + " : " + str(image_path), file=fh)
        pass


print('***** Compression Ended *****')

...