|
|
""" |
|
|
CSS styling and sample image utilities for Gradio interface. |
|
|
""" |
|
|
|
|
|
import os |
|
|
import glob |
|
|
from utils.image_utils import image_to_base64 |
|
|
|
|
|
|
|
|
def get_sample_images(): |
|
|
"""Get list of sample images.""" |
|
|
sample_dir = "sample_images" |
|
|
if os.path.exists(sample_dir): |
|
|
image_files = glob.glob(os.path.join(sample_dir, "*.png")) + glob.glob(os.path.join(sample_dir, "*.jpg")) |
|
|
return sorted(image_files) |
|
|
return [] |
|
|
|
|
|
|
|
|
def generate_css(): |
|
|
"""Generate CSS with base64 images for sample buttons.""" |
|
|
base_css = """ |
|
|
/* Target only the image display area, not the whole component */ |
|
|
.image-container [data-testid="image"] { |
|
|
height: 500px !important; |
|
|
min-height: 500px !important; |
|
|
} |
|
|
|
|
|
/* Make images fill their containers */ |
|
|
.image-container img { |
|
|
width: 500px !important; |
|
|
height: 500px !important; |
|
|
object-fit: contain !important; |
|
|
object-position: center !important; |
|
|
} |
|
|
|
|
|
/* Sample image buttons with background images */ |
|
|
.sample-image-btn { |
|
|
height: 120px !important; |
|
|
width: 120px !important; |
|
|
background-size: cover !important; |
|
|
background-position: center !important; |
|
|
border: 2px solid #ddd !important; |
|
|
border-radius: 8px !important; |
|
|
cursor: pointer !important; |
|
|
transition: border-color 0.2s !important; |
|
|
margin: 5px !important; |
|
|
} |
|
|
|
|
|
.sample-image-btn:hover { |
|
|
border-color: #007acc !important; |
|
|
} |
|
|
""" |
|
|
|
|
|
|
|
|
sample_images = get_sample_images() |
|
|
if sample_images: |
|
|
for i, img_path in enumerate(sample_images): |
|
|
try: |
|
|
base64_img = image_to_base64(img_path) |
|
|
base_css += f"#sample_btn_{i} {{ background-image: url('{base64_img}'); }}\n" |
|
|
except Exception: |
|
|
|
|
|
continue |
|
|
|
|
|
return base_css |