| 7210 | """ |
| 7211 | |
| 7212 | def __init__(self, **kwargs): |
| 7213 | from base64 import b64encode |
| 7214 | from io import BytesIO |
| 7215 | |
| 7216 | from PIL import Image, ImageSequence |
| 7217 | |
| 7218 | try: |
| 7219 | url = kwargs.get("url") |
| 7220 | if not url.startswith("http"): |
| 7221 | url = os.path.abspath(url) |
| 7222 | if not os.path.exists(url): |
| 7223 | raise FileNotFoundError("The provided file does not exist.") |
| 7224 | |
| 7225 | ext = os.path.splitext(url)[1][1:] # file extension |
| 7226 | image = Image.open(url) |
| 7227 | |
| 7228 | f = BytesIO() |
| 7229 | if ext.lower() == "gif": |
| 7230 | frames = [] |
| 7231 | # Loop over each frame in the animated image |
| 7232 | for frame in ImageSequence.Iterator(image): |
| 7233 | frame = frame.convert("RGBA") |
| 7234 | b = BytesIO() |
| 7235 | frame.save(b, format="gif") |
| 7236 | frame = Image.open(b) |
| 7237 | frames.append(frame) |
| 7238 | frames[0].save( |
| 7239 | f, |
| 7240 | format="GIF", |
| 7241 | save_all=True, |
| 7242 | append_images=frames[1:], |
| 7243 | loop=0, |
| 7244 | ) |
| 7245 | else: |
| 7246 | image.save(f, ext) |
| 7247 | |
| 7248 | data = b64encode(f.getvalue()) |
| 7249 | data = data.decode("ascii") |
| 7250 | url = "data:image/{};base64,".format(ext) + data |
| 7251 | kwargs["url"] = url |
| 7252 | except Exception as e: |
| 7253 | raise Exception(e) |
| 7254 | |
| 7255 | super().__init__(**kwargs) |
| 7256 | |
| 7257 | |
| 7258 | def linked_maps( |