added EXIF tagging
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
__version__ = "20210821.0"
|
__version__ = "20210826.0"
|
||||||
|
|
||||||
|
|
||||||
def get_version():
|
def get_version():
|
||||||
|
|||||||
@@ -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])
|
||||||
|
|||||||
Reference in New Issue
Block a user