File size: 3,258 Bytes
1fd8395 9c6079a 838f8a4 1fd8395 838f8a4 1fd8395 838f8a4 b566f5d 838f8a4 9c6079a 838f8a4 9c6079a 838f8a4 b566f5d 838f8a4 b566f5d 9c6079a 838f8a4 0b1d272 b566f5d 838f8a4 9c6079a dddb763 838f8a4 b566f5d 838f8a4 b566f5d 838f8a4 0b1d272 838f8a4 0b1d272 b566f5d 838f8a4 b566f5d 838f8a4 b566f5d 838f8a4 b566f5d dddb763 0b1d272 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
import streamlit as st
import os
import csv
DATA_DIR = "data/uploadedImages"
RESOURCES_FILE = "Resources.csv"
uploaded_images = {'characters': {}, 'terrain': {}}
def get_image_path(img, name, image_type):
file_path = os.path.join(DATA_DIR, image_type, name, img.name)
os.makedirs(os.path.dirname(file_path), exist_ok=True)
with open(file_path, "wb") as img_file:
img_file.write(img.getbuffer())
return file_path
def update_resources_file(uploaded_file, name, image_type):
file_content = (name, uploaded_file.name, image_type)
with open(RESOURCES_FILE, mode='a', newline='') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(file_content)
def get_resources():
if os.path.exists(RESOURCES_FILE):
with open(RESOURCES_FILE, mode='r') as csv_file:
csv_reader = csv.reader(csv_file)
return [row for row in csv_reader if row]
else:
return []
def display_images(image_type):
for name, files in uploaded_images[image_type].items():
for file in files:
st.sidebar.image(file, width=100, caption=name, use_column_width=True, output_format='jpg', link_url=file)
def display_terrain():
row = []
for name, files in uploaded_images['terrain'].items():
for file in files:
row.append(file)
if len(row) == 3:
st.image(row, width=100 * 3)
row = []
if row:
st.image(row, width=100 * len(row)) # Last row, if not complete
def display_uploaded_images(image_type):
st.write(f"## Uploaded {image_type.capitalize()}")
if image_type == 'characters':
display_images('characters')
else:
display_terrain()
st.write("## Uploaded Images Table")
resources = get_resources()
if resources:
st.write("| Name | File Name | Image Type | Image |")
st.write("| --- | --- | --- | --- |")
for name, file_name, image_type in resources:
file_name_without_extension = os.path.splitext(file_name)[0]
image_url = f"{DATA_DIR}/{image_type}/{name}/{file_name}"
image_tag = f"<img src='{image_url}' width='100'/>"
download_url = f"[Download]({image_url})"
st.write(f"| {name} | {file_name_without_extension} | {image_type} | {image_tag} {download_url} |")
else:
st.write("No images uploaded yet.")
image_type = st.selectbox('Choose image type:', options=['characters', 'terrain'])
name = st.text_input('Enter a name for the image:')
uploaded_files = st.file_uploader('Upload image(s)', type=['png', 'jpg'], accept_multiple_files=True)
for uploaded_file in uploaded_files:
if uploaded_file is not None:
# Get actual image file
file_path = get_image_path(uploaded_file, name, image_type)
uploaded_images[image_type].setdefault(name, [])
uploaded_images[image_type][name].append(file_path)
st.image(file_path, use_column_width=True)
update_resources_file(uploaded_file, name, image_type)
display_uploaded_images(image_type)
# Add a download link for the Resources.csv file
csv_url = f"{DATA_DIR}/{RESOURCES_FILE}"
csv_link = f"[Download {RESOURCES_FILE}]({csv_url})"
st.markdown(csv_link)
|