File size: 1,935 Bytes
0362b52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests
from PIL import Image
import io

def download_image(url):
    """Download image from URL and return as bytes."""
    response = requests.get(url)
    if response.status_code == 200:
        return response.content
    return None

def render_image_preview(result):
    """Render the image preview with download options."""
    
    if not result or "images" not in result:
        st.error("No images to display")
        return
    
    st.subheader("🖼️ Generated Images")
    
    # Create columns for multiple images
    cols = st.columns(len(result["images"]))
    
    for idx, (col, image_data) in enumerate(zip(cols, result["images"])):
        with col:
            if "url" in image_data:
                image_bytes = download_image(image_data["url"])
                if image_bytes:
                    st.image(image_bytes, caption=f"Generated Image {idx + 1}")
                    
                    # Convert to PIL Image for saving
                    image = Image.open(io.BytesIO(image_bytes))
                    
                    # Save button
                    img_byte_arr = io.BytesIO()
                    image.save(img_byte_arr, format=image.format or 'PNG')
                    img_byte_arr = img_byte_arr.getvalue()
                    
                    st.download_button(
                        label=f"💾 Download Image {idx + 1}",
                        data=img_byte_arr,
                        file_name=f"adsnap_generated_{idx + 1}.png",
                        mime="image/png"
                    )
            else:
                st.error(f"Invalid image data for image {idx + 1}")
    
    # Display API response details in expander
    with st.expander("🔍 Image Generation Details"):
        st.json({
            k: v for k, v in result.items() 
            if k != "images"  # Exclude image data to keep response clean
        })