gallery / app.py
wybxc's picture
upload files
3ce4ca8 unverified
from pathlib import Path
import streamlit as st
import numpy as np
@st.experimental_singleton # type: ignore
def get_image_list():
image_dir = Path(__file__).parent.resolve() / "images"
return list(image_dir.glob("*.png"))
def overflow_text(text: str, max_width: int):
return text if len(text) <= max_width - 3 else f"{text[:max_width - 3]}..."
def read_png(path: Path):
from png import Reader
with path.open("rb") as f:
reader = Reader(file=f)
width, height, pixels, metadata = reader.read_flat()
data = np.array(pixels).reshape(height, width, metadata["planes"])
parameters = (metadata["text"] or {}).get("parameters")
return width, height, data, parameters
image_list = get_image_list()
with st.sidebar:
image_path = st.radio(
"Select an image", image_list, format_func=lambda p: overflow_text(p.name, 30)
)
if image_path:
width, height, image, parameters = read_png(image_path)
st.image(
image, use_column_width="auto", caption=f"{image_path.name} ({width}x{height})"
)
if parameters:
st.write("Parameters:")
st.code(parameters, language="text")