mirror of
https://github.com/tomasriveral/Hairloss-report.git
synced 2026-08-11 18:38:37 +02:00
102 lines
2.6 KiB
Python
102 lines
2.6 KiB
Python
from tinydb import TinyDB
|
|
from pathlib import Path
|
|
|
|
def gallery(image_path):
|
|
DB_FILE = Path(image_path).parent / "hairlineResults.json"
|
|
OUTPUT_TEX = "gallery.tex"
|
|
IMAGE_DIR = Path(image_path)
|
|
|
|
IMAGES_PER_ROW = 3
|
|
IMAGE_HEIGHT = "5cm"
|
|
|
|
db = TinyDB(DB_FILE)
|
|
|
|
entries = sorted(db.all(), key=lambda x: x["filename"])
|
|
|
|
def latex_escape(s):
|
|
return (
|
|
str(s)
|
|
.replace("\\", "\\textbackslash{}")
|
|
.replace("_", "\\_")
|
|
.replace("&", "\\&")
|
|
.replace("%", "\\%")
|
|
.replace("#", "\\#")
|
|
.replace("{", "\\{")
|
|
.replace("}", "\\}")
|
|
)
|
|
|
|
with open(OUTPUT_TEX, "w", encoding="utf8") as f:
|
|
|
|
f.write(r"""\documentclass[a4paper]{article}
|
|
\usepackage[a4paper,margin=1cm]{geometry}
|
|
\usepackage{graphicx}
|
|
\usepackage{array}
|
|
\usepackage{longtable}
|
|
\usepackage{float}
|
|
\usepackage{grffile}
|
|
\usepackage[T1]{fontenc}
|
|
|
|
\pagestyle{empty}
|
|
\setlength{\parindent}{0pt}
|
|
|
|
\begin{document}
|
|
|
|
""")
|
|
|
|
for i in range(0, len(entries), IMAGES_PER_ROW):
|
|
|
|
row = entries[i:i + IMAGES_PER_ROW]
|
|
|
|
cols = "c" * len(row)
|
|
f.write(r"\begin{tabular}{" + cols + "}\n")
|
|
|
|
#
|
|
# Images
|
|
#
|
|
image_cells = []
|
|
for e in row:
|
|
img_path = Path(IMAGE_DIR) / e["filename"]
|
|
image_cells.append(
|
|
rf"\includegraphics[height={IMAGE_HEIGHT}]{{{img_path.as_posix()}}}"
|
|
)
|
|
|
|
f.write(" & ".join(image_cells) + r"\\[2mm]" + "\n")
|
|
|
|
# LaTeX comment with filenames
|
|
f.write("% " + ", ".join(e["filename"] for e in row) + "\n")
|
|
|
|
#
|
|
# Text cells (FIXED)
|
|
#
|
|
text_cells = []
|
|
|
|
for e in row:
|
|
|
|
lines = []
|
|
|
|
lines.append(rf"\texttt{{\tiny {latex_escape(e['filename'])}}}")
|
|
|
|
for k, v in e.items():
|
|
if k == "filename":
|
|
continue
|
|
|
|
if isinstance(v, float):
|
|
lines.append(f"{latex_escape(k)}: {v:.4f}")
|
|
else:
|
|
lines.append(f"{latex_escape(k)}: {latex_escape(v)}")
|
|
|
|
cell = (
|
|
r"\begin{minipage}[t]{4cm}\ttfamily\tiny "
|
|
+ r" \\ ".join(lines)
|
|
+ r" \end{minipage}"
|
|
)
|
|
|
|
text_cells.append(cell)
|
|
|
|
f.write(" & ".join(text_cells) + r"\\" + "\n")
|
|
|
|
f.write(r"\end{tabular}")
|
|
f.write("\n\n\\vspace{5mm}\n\n")
|
|
|
|
f.write(r"\end{document}")
|