awacke1 commited on
Commit
5e3a0aa
·
verified ·
1 Parent(s): e6cd371

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -4
app.py CHANGED
@@ -3,6 +3,8 @@ import os
3
  from PIL import Image
4
  import random
5
  from io import BytesIO
 
 
6
 
7
  # Function to arrange images dynamically
8
  def arrange_images(image_files, canvas_size=(3000, 3000)):
@@ -84,6 +86,12 @@ def arrange_images(image_files, canvas_size=(3000, 3000)):
84
  buffer.seek(0)
85
  return buffer, canvas
86
 
 
 
 
 
 
 
87
  # Streamlit App
88
  st.title("Dynamic Dungeon Map Generator")
89
  st.write("Automatically generates dungeon maps by arranging PNG images dynamically.")
@@ -102,6 +110,8 @@ if "canvas" not in st.session_state:
102
  st.session_state["canvas"] = None
103
  if "saved" not in st.session_state:
104
  st.session_state["saved"] = False
 
 
105
 
106
  # Generate map if not saved and layout_image is empty
107
  if st.session_state["layout_image"] is None or not st.session_state["saved"]:
@@ -116,17 +126,25 @@ if st.session_state["layout_image"] is not None:
116
  st.image(
117
  st.session_state["layout_image"],
118
  caption="Generated Dungeon Map Layout",
119
- use_container_width=True,
120
  output_format="PNG",
121
  clamp=True,
122
  )
123
 
124
  # Save map button
125
  if st.button("💾 Save Map"):
126
- save_path = "saved_dungeon_map.png"
127
- st.session_state["canvas"].save(save_path)
 
128
  st.session_state["saved"] = True
129
- st.success(f"Map saved as {save_path}")
 
 
 
 
 
 
 
130
 
131
  # Regenerate map button
132
  if st.button("🗺️ Regenerate Map"):
@@ -136,6 +154,7 @@ if st.button("🗺️ Regenerate Map"):
136
  st.session_state["layout_image"] = layout_image
137
  st.session_state["canvas"] = canvas
138
  st.session_state["saved"] = False # Mark as unsaved
 
139
  st.experimental_rerun()
140
 
141
  # WASD Controls for scrolling
 
3
  from PIL import Image
4
  import random
5
  from io import BytesIO
6
+ import datetime
7
+ import base64
8
 
9
  # Function to arrange images dynamically
10
  def arrange_images(image_files, canvas_size=(3000, 3000)):
 
86
  buffer.seek(0)
87
  return buffer, canvas
88
 
89
+ # Function to create a base64 download link
90
+ def create_download_link(image_bytes, filename):
91
+ b64 = base64.b64encode(image_bytes.getvalue()).decode()
92
+ href = f'<a href="data:image/png;base64,{b64}" download="{filename}">📥 Download {filename}</a>'
93
+ return href
94
+
95
  # Streamlit App
96
  st.title("Dynamic Dungeon Map Generator")
97
  st.write("Automatically generates dungeon maps by arranging PNG images dynamically.")
 
110
  st.session_state["canvas"] = None
111
  if "saved" not in st.session_state:
112
  st.session_state["saved"] = False
113
+ if "saved_filename" not in st.session_state:
114
+ st.session_state["saved_filename"] = None
115
 
116
  # Generate map if not saved and layout_image is empty
117
  if st.session_state["layout_image"] is None or not st.session_state["saved"]:
 
126
  st.image(
127
  st.session_state["layout_image"],
128
  caption="Generated Dungeon Map Layout",
129
+ use_column_width=True,
130
  output_format="PNG",
131
  clamp=True,
132
  )
133
 
134
  # Save map button
135
  if st.button("💾 Save Map"):
136
+ now = datetime.datetime.now()
137
+ filename = f"dungeon_map_{now.strftime('%Y%m%d_%H%M%S')}.png"
138
+ st.session_state["canvas"].save(filename)
139
  st.session_state["saved"] = True
140
+ st.session_state["saved_filename"] = filename
141
+
142
+ st.success(f"Map saved as {filename}")
143
+ # Generate Base64 download link
144
+ buffer = BytesIO()
145
+ st.session_state["canvas"].save(buffer, format="PNG")
146
+ buffer.seek(0)
147
+ st.markdown(create_download_link(buffer, filename), unsafe_allow_html=True)
148
 
149
  # Regenerate map button
150
  if st.button("🗺️ Regenerate Map"):
 
154
  st.session_state["layout_image"] = layout_image
155
  st.session_state["canvas"] = canvas
156
  st.session_state["saved"] = False # Mark as unsaved
157
+ st.session_state["saved_filename"] = None
158
  st.experimental_rerun()
159
 
160
  # WASD Controls for scrolling