| """ |
| 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 |