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)