Bladeren bron

masterimg support for image description

Lars 1 jaar geleden
bovenliggende
commit
8a02a9f1ec
1 gewijzigde bestanden met toevoegingen van 20 en 15 verwijderingen
  1. 20 15
      masterimg.py

+ 20 - 15
masterimg.py

@@ -6,13 +6,13 @@ import multiprocessing
 from datetime import datetime as dt
 from PIL import Image
 import piexif
-import re
 import math
 import yaml
 from dataclasses import dataclass
 
 from typing import Optional
 
+# Requires pip install piexif, pillow, pyyaml
 
 @dataclass
 class OutputDef:
@@ -25,7 +25,7 @@ class OutputDef:
 
 
 SocialMediaDef = OutputDef(1600, 1080, "JPEG", 96, "sm", "_sm.jpg")
-HqDef = OutputDef(2560, 1920, "JPEG", 95, "hq", "_hq.jpg")
+HqDef = OutputDef(2560, 1920, "JPEG", 98, "hq", "_hq.jpg")
 FullDef = OutputDef(3600, 2700, "JPEG", 98, "full", "_full.jpg")
 
 # --------
@@ -35,9 +35,10 @@ _verbose = False
 WmScale = 1.6
 
 class Config:
-    def __init__(self, yaml_filename:str):        
-        with open(yaml_filename) as f:            
-            cfg = yaml.load(f.read(), Loader=yaml.SafeLoader)
+    def __init__(self, yaml_filename:str):
+        with open(yaml_filename) as f:
+            cfg = yaml.safe_load(f)
+            #cfg = yaml.safload(f.read(), Loader=yaml.SafeLoader)
         self.CfgDict:dict = cfg
         self.Copyright:str = cfg["Copyright"]
         self.UserComment:str = cfg["UserComment"]
@@ -186,20 +187,24 @@ class Watermark:
         main_image.paste(watermark, (wm_x, wm_y), watermark)
 
 
-def makeExifDict(copyright, usercomment) -> bytes:
-    exif_dict = {
-        "0th": {
-            piexif.ImageIFD.Copyright: copyright.encode("ascii")
-        },
-        "Exif": {
-            piexif.ExifIFD.UserComment: b"ASCII\0\0\0" + usercomment.encode('ascii')
-        },
+def makeExifBytes(copyright:Optional[str], user_comment:Optional[str], image_description:Optional[str]) -> bytes:
+    exif = {
+        "0th": {},
+        "Exif": {},
         "GPS": {},
         "1st": {},
         "thumbnail": None
     }
 
-    return piexif.dump(exif_dict)
+    if copyright is not None:
+        exif["0th"][piexif.ImageIFD.Copyright] = copyright.encode("ascii")
+    if user_comment is not None:
+        #  = b'\0\0\0\0\0\0\0\0' + user_comment.encode('utf-8')
+        exif["Exif"][piexif.ExifIFD.UserComment] = b"ASCII\0\0\0" + user_comment.encode('ascii')
+    if image_description is not None:
+        exif['0th'][piexif.ImageIFD.ImageDescription] = image_description.encode('utf-8')
+
+    return piexif.dump(exif)
 
 def resizeSaveOutput(input_filename:str, out_name:str, img:Image, exif_bytes:bytes, output_def:OutputDef):
     
@@ -252,7 +257,7 @@ def process_image(main_image_path:str, watermark:Watermark):
         
         print("Input: %s, (year: %d to be used for copyright notice)" % (main_image_path, year))
 
-        exif = makeExifDict(_config.Copyright % year, _config.UserComment)
+        exif = makeExifBytes(_config.Copyright % year, _config.UserComment, img_cfg.get("title"))
 
         # Load the main image
         main_image = Image.open(main_image_path)