added EXIF tagging

This commit is contained in:
Ville Rantanen
2021-08-26 09:37:19 +03:00
parent 68fa1c09e0
commit c16631e676
2 changed files with 80 additions and 17 deletions

View File

@@ -1,4 +1,4 @@
__version__ = "20210821.0" __version__ = "20210826.0"
def get_version(): def get_version():

View File

@@ -16,6 +16,7 @@ class Mirva:
) )
self.resource_dir = ".mirva" self.resource_dir = ".mirva"
self.config_file = os.path.join(self.resource_dir, "config.cfg") self.config_file = os.path.join(self.resource_dir, "config.cfg")
self.config_backup = os.path.join(self.resource_dir, "config.cfg.bkp")
self.get_options() self.get_options()
os.chdir(self.options.folder) os.chdir(self.options.folder)
self.write_resources() self.write_resources()
@@ -24,8 +25,9 @@ class Mirva:
self.create_config() self.create_config()
print("Config created: Exiting without gallery creation. Check config first.") print("Config created: Exiting without gallery creation. Check config first.")
return return
self.create_config()
self.get_config() self.get_config()
if self.options.exif:
self.append_exif()
self.create_posts() self.create_posts()
self.write_index() self.write_index()
self.write_mediums() self.write_mediums()
@@ -33,11 +35,11 @@ class Mirva:
def create_config(self): def create_config(self):
config = configparser.ConfigParser() self.config = configparser.ConfigParser()
config.read(self.config_file) self.config.read(self.config_file)
config_changed = False config_changed = False
if not "SITE" in config: if not "SITE" in self.config:
config["SITE"] = { self.config["SITE"] = {
"title": "", "title": "",
"sub_title": "", "sub_title": "",
"intro": "", "intro": "",
@@ -46,20 +48,14 @@ class Mirva:
config_changed = True config_changed = True
for f in self.file_list: for f in self.file_list:
if not f in config: if not f in self.config:
title, _ = os.path.splitext(f) title, _ = os.path.splitext(f)
title = title.replace("_", " ") title = title.replace("_", " ")
config[f] = {"title": title, "description": ""} self.config[f] = {"title": title, "description": ""}
config_changed = True config_changed = True
if config_changed: if config_changed:
print( self.write_config()
"Modified config: {}".format(
os.path.join(self.options.folder, self.config_file)
)
)
with open(self.config_file, "wt") as fp:
config.write(fp)
def create_posts(self): def create_posts(self):
@@ -75,6 +71,21 @@ class Mirva:
self.config = configparser.ConfigParser() self.config = configparser.ConfigParser()
self.config.read(self.config_file) self.config.read(self.config_file)
def write_config(self):
print(
"Modified config: {}".format(
os.path.join(self.options.folder, self.config_file)
)
)
if os.path.exists(self.config_file):
with open(self.config_file, "rt") as reader:
with open(self.config_backup, "wt") as writer:
writer.write(reader.read())
with open(self.config_file, "wt") as fp:
self.config.write(fp)
def get_files(self): def get_files(self):
image_match = re.compile(".*\.jpg$|.*\.jpeg$|.*\.png$|.*\.gif$|.*\.tif$", re.I) image_match = re.compile(".*\.jpg$|.*\.jpeg$|.*\.png$|.*\.gif$|.*\.tif$", re.I)
files = [] files = []
@@ -95,7 +106,7 @@ class Mirva:
) )
# parser.add_argument("-v", default=False, action="store_true") # parser.add_argument("-v", default=False, action="store_true")
parser.add_argument( parser.add_argument(
"--config", default=False, action="store_true", help="Write config and exit" "--config", default=False, action="store_true", help="Write config and exit. Required if more images are added."
) )
parser.add_argument( parser.add_argument(
"--force", "--force",
@@ -103,6 +114,12 @@ class Mirva:
action="store_true", action="store_true",
help="Force regeneration of middle sized images", help="Force regeneration of middle sized images",
) )
parser.add_argument(
"--exif",
default=False,
action="store_true",
help="Append EXIF information to image descriptions",
)
parser.add_argument( parser.add_argument(
"--version", "--version",
action="version", action="version",
@@ -317,4 +334,50 @@ function create_button(direction, to) {{
] ]
sys.stdout.write(".") sys.stdout.write(".")
sys.stdout.flush() sys.stdout.flush()
subprocess.call(convargs) subprocess.run(convargs)
sys.stdout.write("\n")
def append_exif(self):
exif_format = '''
<ul>
<li>Date: %[EXIF:DateTimeOriginal]
<li>Exposure: %[EXIF:ExposureTime]s
<li>Fnumber: F%[EXIF:FNumber]
<li>Pixels: %w x %h
<li>Size: {size}
</ul>
'''
for f in self.config:
if f in self.file_list:
sys.stdout.write(".")
sys.stdout.flush()
file_size = human_size(f)
p = subprocess.run(
['identify','-format',exif_format.format(size=file_size),"{}[0]".format(f)],
capture_output = True
)
self.config[f]['description'] += p.stdout.decode('utf-8')
sys.stdout.write("\n")
self.write_config()
def human_size(file_name, precision=1):
size = os.path.getsize(file_name)
if size == None:
return "nan"
sign = ""
if size < 0:
sign = "-"
size = -size
suffixes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB"]
suffixIndex = 0
defPrecision = 0
while size > 1024:
suffixIndex += 1
size = size / 1024.0
defPrecision = precision
return "%s%.*f%s" % (sign, defPrecision, size, suffixes[suffixIndex])