|
import streamlit as st |
|
import os |
|
import csv |
|
import time |
|
|
|
uploaded_images = {'characters': {}, 'terrain': {}} |
|
|
|
def get_image_path(img, name, image_type): |
|
file_path = f"data/uploadedImages/{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_csv_file(uploaded_file, name, image_type): |
|
csv_file_path = "Resources.csv" |
|
with open(csv_file_path, mode='a', newline='') as csv_file: |
|
csv_writer = csv.writer(csv_file) |
|
csv_writer.writerow([name, uploaded_file.name, image_type]) |
|
|
|
def get_uploaded_files_info(): |
|
csv_file_path = "Resources.csv" |
|
with open(csv_file_path, mode='r') as csv_file: |
|
csv_reader = csv.reader(csv_file) |
|
files_info = [] |
|
for row in csv_reader: |
|
files_info.append(row) |
|
return files_info |
|
|
|
def display_images_from_csv(): |
|
files_info = get_uploaded_files_info() |
|
for row in files_info: |
|
if row[2] == 'characters': |
|
img_path = f"data/uploadedImages/{row[2]}/{row[0]}/{row[1]}" |
|
st.sidebar.image(img_path, width=100, caption=row[0]) |
|
else: |
|
img_path = f"data/uploadedImages/{row[2]}/{row[0]}/{row[1]}" |
|
st.image(img_path, width=100, caption=row[0]) |
|
|
|
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: |
|
|
|
bytes_data = get_image_path(uploaded_file, name, image_type) |
|
uploaded_images[image_type].setdefault(name, []) |
|
uploaded_images[image_type][name].append(bytes_data) |
|
st.image(bytes_data, use_container_width=True) |
|
update_csv_file(uploaded_file, name, image_type) |
|
|
|
if image_type == 'characters': |
|
if uploaded_images['characters']: |
|
st.sidebar.write('**Characters**') |
|
for name, files in uploaded_images['characters'].items(): |
|
for file in files: |
|
st.sidebar.image(file, width=100, caption=name) |
|
else: |
|
if uploaded_images['terrain']: |
|
st.write('**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)) |
|
|
|
while True: |
|
time.sleep(20) |
|
st.empty() |
|
display_images_from_csv() |
|
|