mirror of
https://github.com/vladmandic/automatic
synced 2026-09-20 01:31:13 +02:00
better image save reporting
This commit is contained in:
@@ -58,7 +58,7 @@ def save_image(image, fn, ext):
|
||||
image.save(fn, format=image_format, quality=shared.opts.jpeg_quality, pnginfo=pnginfo_data)
|
||||
elif image_format == 'JPEG':
|
||||
if image.mode == 'RGBA':
|
||||
shared.log.warning('Saving RGBA image as JPEG: Alpha channel will be lost')
|
||||
shared.log.warning('Save: RGBA image as JPEG - removed alpha channel')
|
||||
image = image.convert("RGB")
|
||||
elif image.mode == 'I;16':
|
||||
image = image.point(lambda p: p * 0.0038910505836576).convert("L")
|
||||
|
||||
@@ -70,7 +70,7 @@ def pil_to_temp_file(self, img: Image, dir: str, format="png") -> str: # pylint:
|
||||
img.save(name, pnginfo=(metadata if use_metadata else None))
|
||||
img.already_saved_as = name
|
||||
size = os.path.getsize(name)
|
||||
shared.log.debug(f'Saving temp: image="{name}" resolution={img.width}x{img.height} size={size}')
|
||||
shared.log.debug(f'Save temp: image="{name}" resolution={img.width}x{img.height} size={size}')
|
||||
params = ', '.join([f'{k}: {v}' for k, v in img.info.items()])
|
||||
params = params[12:] if params.startswith('parameters: ') else params
|
||||
with open(os.path.join(paths.data_path, "params.txt"), "w", encoding="utf8") as file:
|
||||
|
||||
+8
-8
@@ -545,21 +545,19 @@ def atomically_save_image():
|
||||
try:
|
||||
image_format = Image.registered_extensions()[extension]
|
||||
except Exception:
|
||||
shared.log.warning(f'Saving: unknown image format: {extension}')
|
||||
shared.log.warning(f'Save: unknown image format: {extension}')
|
||||
image_format = 'JPEG'
|
||||
if shared.opts.image_watermark_enabled or (shared.opts.image_watermark_position != 'none' and shared.opts.image_watermark_image != ''):
|
||||
image = set_watermark(image, shared.opts.image_watermark)
|
||||
size = os.path.getsize(fn) if os.path.exists(fn) else 0
|
||||
shared.log.info(f'Saving: image="{fn}" type={image_format} resolution={image.width}x{image.height} size={size}')
|
||||
exifinfo = (exifinfo or "") if shared.opts.image_metadata else ""
|
||||
# additional metadata saved in files
|
||||
if shared.opts.save_txt and len(exifinfo) > 0:
|
||||
try:
|
||||
with open(filename_txt, "w", encoding="utf8") as file:
|
||||
file.write(f"{exifinfo}\n")
|
||||
shared.log.info(f'Saving: text="{filename_txt}" len={len(exifinfo)}')
|
||||
shared.log.info(f'Save: text="{filename_txt}" len={len(exifinfo)}')
|
||||
except Exception as e:
|
||||
shared.log.warning(f'Saving failed: description={filename_txt} {e}')
|
||||
shared.log.warning(f'Save failed: description={filename_txt} {e}')
|
||||
# actual save
|
||||
if image_format == 'PNG':
|
||||
pnginfo_data = PngImagePlugin.PngInfo()
|
||||
@@ -568,7 +566,7 @@ def atomically_save_image():
|
||||
save_args = { 'compress_level': 6, 'pnginfo': pnginfo_data if shared.opts.image_metadata else None }
|
||||
elif image_format == 'JPEG':
|
||||
if image.mode == 'RGBA':
|
||||
shared.log.warning('Saving: removing alpha channel')
|
||||
shared.log.warning('Save: removing alpha channel')
|
||||
image = image.convert("RGB")
|
||||
elif image.mode == 'I;16':
|
||||
image = image.point(lambda p: p * 0.0038910505836576).convert("L")
|
||||
@@ -586,8 +584,10 @@ def atomically_save_image():
|
||||
try:
|
||||
image.save(fn, format=image_format, **save_args)
|
||||
except Exception as e:
|
||||
shared.log.error(f'Saving failed: file="{fn}" format={image_format} args={save_args} {e}')
|
||||
shared.log.error(f'Save failed: file="{fn}" format={image_format} args={save_args} {e}')
|
||||
errors.display(e, 'Image save')
|
||||
size = os.path.getsize(fn) if os.path.exists(fn) else 0
|
||||
shared.log.info(f'Save: image="{fn}" type={image_format} resolution={image.width}x{image.height} size={size}')
|
||||
if shared.opts.save_log_fn != '' and len(exifinfo) > 0:
|
||||
fn = os.path.join(paths.data_path, shared.opts.save_log_fn)
|
||||
if not fn.endswith('.json'):
|
||||
@@ -599,7 +599,7 @@ def atomically_save_image():
|
||||
entry = { 'id': idx, 'filename': filename, 'time': datetime.datetime.now().isoformat(), 'info': exifinfo }
|
||||
entries.append(entry)
|
||||
shared.writefile(entries, fn, mode='w', silent=True)
|
||||
shared.log.info(f'Saving: json="{fn}" records={len(entries)}')
|
||||
shared.log.info(f'Save: json="{fn}" records={len(entries)}')
|
||||
save_queue.task_done()
|
||||
|
||||
|
||||
|
||||
+4
-4
@@ -141,7 +141,7 @@ def writefile(data, filename, mode='w', silent=False, atomic=False):
|
||||
locked = False
|
||||
|
||||
def default(obj):
|
||||
log.error(f'Saving: file="{filename}" not a valid object: {obj}')
|
||||
log.error(f'Save: file="{filename}" not a valid object: {obj}')
|
||||
return str(obj)
|
||||
|
||||
try:
|
||||
@@ -160,7 +160,7 @@ def writefile(data, filename, mode='w', silent=False, atomic=False):
|
||||
else:
|
||||
raise ValueError('not a valid object')
|
||||
except Exception as e:
|
||||
log.error(f'Saving failed: file="{filename}" {e}')
|
||||
log.error(f'Save failed: file="{filename}" {e}')
|
||||
return
|
||||
try:
|
||||
if locking_available:
|
||||
@@ -186,7 +186,7 @@ def writefile(data, filename, mode='w', silent=False, atomic=False):
|
||||
if not silent:
|
||||
log.debug(f'Save: file="{filename}" json={len(data)} bytes={len(output)} time={t1-t0:.3f}')
|
||||
except Exception as e:
|
||||
log.error(f'Saving failed: file="{filename}" {e}')
|
||||
log.error(f'Save failed: file="{filename}" {e}')
|
||||
try:
|
||||
if locking_available and lock_file is not None:
|
||||
lock_file.release_write_lock()
|
||||
@@ -936,7 +936,7 @@ class Options:
|
||||
if len(unused_settings) > 0:
|
||||
log.debug(f"Unused settings: {unused_settings}")
|
||||
except Exception as e:
|
||||
log.error(f'Saving settings failed: {filename} {e}')
|
||||
log.error(f'Save settings failed: {filename} {e}')
|
||||
|
||||
def save(self, filename=None, silent=False):
|
||||
threading.Thread(target=self.save_atomic, args=(filename, silent)).start()
|
||||
|
||||
@@ -157,7 +157,7 @@ def save_files(js_data, files, html_info, index):
|
||||
filename_txt = f"{os.path.splitext(tgt_filename)[0]}.txt"
|
||||
with open(filename_txt, "w", encoding="utf8") as file:
|
||||
file.write(f"{info}\n")
|
||||
shared.log.debug(f'Saving: text="{filename_txt}"')
|
||||
shared.log.debug(f'Save: text="{filename_txt}"')
|
||||
except Exception as e:
|
||||
shared.log.warning(f'Image description save failed: {filename_txt} {e}')
|
||||
script_callbacks.image_save_btn_callback(tgt_filename)
|
||||
|
||||
Reference in New Issue
Block a user