File size: 1,814 Bytes
e47efb2 | 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 | from pathlib import Path
import numpy as np
from PIL import Image, ImageDraw
SUPPORTED_IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".bmp", ".webp"}
class ImageState:
def __init__(self, assets_dir: str = "assets"):
self.assets_dir = Path(assets_dir)
self.image_paths = self._load_image_paths()
self.index = 0
def _load_image_paths(self):
if not self.assets_dir.exists():
return []
paths = []
for path in sorted(self.assets_dir.iterdir()):
if path.suffix.lower() in SUPPORTED_IMAGE_EXTENSIONS:
paths.append(path)
return paths
def next_image(self):
if not self.image_paths:
return None
self.index = (self.index + 1) % len(self.image_paths)
return self.image_paths[self.index]
def prev_image(self):
if not self.image_paths:
return None
self.index = (self.index - 1) % len(self.image_paths)
return self.image_paths[self.index]
def first_image(self):
if not self.image_paths:
return None
self.index = 0
return self.image_paths[self.index]
def last_image(self):
if not self.image_paths:
return None
self.index = len(self.image_paths) - 1
return self.image_paths[self.index]
def get_current_image(self):
if not self.image_paths:
return self._create_placeholder_image()
image = Image.open(self.image_paths[self.index]).convert("RGB")
return np.array(image)
def _create_placeholder_image(self):
image = Image.new("RGB", (640, 360), color=(40, 40, 40))
draw = ImageDraw.Draw(image)
draw.text((20, 20), "No images in assets/", fill=(255, 255, 255))
return np.array(image)
|