(img, metadata, metadata_parser: MetadataParser | None = None, output_format=None, task=None, persist_image=True)
| 22 | |
| 23 | |
| 24 | def log(img, metadata, metadata_parser: MetadataParser | None = None, output_format=None, task=None, persist_image=True) -> str: |
| 25 | path_outputs = modules.config.temp_path if args_manager.args.disable_image_log or not persist_image else modules.config.path_outputs |
| 26 | output_format = output_format if output_format else modules.config.default_output_format |
| 27 | date_string, local_temp_filename, only_name = generate_temp_filename(folder=path_outputs, extension=output_format) |
| 28 | os.makedirs(os.path.dirname(local_temp_filename), exist_ok=True) |
| 29 | |
| 30 | parsed_parameters = metadata_parser.to_string(metadata.copy()) if metadata_parser is not None else '' |
| 31 | image = Image.fromarray(img) |
| 32 | |
| 33 | if output_format == OutputFormat.PNG.value: |
| 34 | if parsed_parameters != '': |
| 35 | pnginfo = PngInfo() |
| 36 | pnginfo.add_text('parameters', parsed_parameters) |
| 37 | pnginfo.add_text('fooocus_scheme', metadata_parser.get_scheme().value) |
| 38 | else: |
| 39 | pnginfo = None |
| 40 | image.save(local_temp_filename, pnginfo=pnginfo) |
| 41 | elif output_format == OutputFormat.JPEG.value: |
| 42 | image.save(local_temp_filename, quality=95, optimize=True, progressive=True, exif=get_exif(parsed_parameters, metadata_parser.get_scheme().value) if metadata_parser else Image.Exif()) |
| 43 | elif output_format == OutputFormat.WEBP.value: |
| 44 | image.save(local_temp_filename, quality=95, lossless=False, exif=get_exif(parsed_parameters, metadata_parser.get_scheme().value) if metadata_parser else Image.Exif()) |
| 45 | else: |
| 46 | image.save(local_temp_filename) |
| 47 | |
| 48 | if args_manager.args.disable_image_log: |
| 49 | return local_temp_filename |
| 50 | |
| 51 | html_name = os.path.join(os.path.dirname(local_temp_filename), 'log.html') |
| 52 | |
| 53 | css_styles = ( |
| 54 | "<style>" |
| 55 | "body { background-color: #121212; color: #E0E0E0; } " |
| 56 | "a { color: #BB86FC; } " |
| 57 | ".metadata { border-collapse: collapse; width: 100%; } " |
| 58 | ".metadata .label { width: 15%; } " |
| 59 | ".metadata .value { width: 85%; font-weight: bold; } " |
| 60 | ".metadata th, .metadata td { border: 1px solid #4d4d4d; padding: 4px; } " |
| 61 | ".image-container img { height: auto; max-width: 512px; display: block; padding-right:10px; } " |
| 62 | ".image-container div { text-align: center; padding: 4px; } " |
| 63 | "hr { border-color: gray; } " |
| 64 | "button { background-color: black; color: white; border: 1px solid grey; border-radius: 5px; padding: 5px 10px; text-align: center; display: inline-block; font-size: 16px; cursor: pointer; }" |
| 65 | "button:hover {background-color: grey; color: black;}" |
| 66 | "</style>" |
| 67 | ) |
| 68 | |
| 69 | js = ( |
| 70 | """<script> |
| 71 | function to_clipboard(txt) { |
| 72 | txt = decodeURIComponent(txt); |
| 73 | if (navigator.clipboard && navigator.permissions) { |
| 74 | navigator.clipboard.writeText(txt) |
| 75 | } else { |
| 76 | const textArea = document.createElement('textArea') |
| 77 | textArea.value = txt |
| 78 | textArea.style.width = 0 |
| 79 | textArea.style.position = 'fixed' |
| 80 | textArea.style.left = '-999px' |
| 81 | textArea.style.top = '10px' |
no test coverage detected