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)