Coverage for src/extratools_image/__init__.py: 56%
16 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-03-27 23:49 -0700
« prev ^ index » next coverage.py v7.7.1, created at 2025-03-27 23:49 -0700
1from base64 import b64decode, b64encode
2from io import BytesIO
4from PIL.Image import Image
5from PIL.Image import open as open_image
8def image_to_bytes(image: Image, _format: str = "PNG") -> bytes:
9 bio = BytesIO()
10 image.save(bio, format=_format)
11 return bio.getvalue()
14def bytes_to_image(b: bytes, _format: str | None = None) -> Image:
15 return open_image(
16 BytesIO(b),
17 formats=((_format,) if _format else None),
18 )
21def image_to_base64_str(image: Image, _format: str = "PNG") -> str:
22 return b64encode(image_to_bytes(image, _format)).decode()
25def image_to_data_url(image: Image, _format: str = "PNG") -> str:
26 """
27 Following https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Schemes/data
28 """
30 return f"data:image/{_format.lower()};base64,{image_to_base64_str(image)}"
33def base64_str_to_image(s: str) -> Image:
34 return open_image(b64decode(s.encode()))