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

1from base64 import b64decode, b64encode 

2from io import BytesIO 

3 

4from PIL.Image import Image 

5from PIL.Image import open as open_image 

6 

7 

8def image_to_bytes(image: Image, _format: str = "PNG") -> bytes: 

9 bio = BytesIO() 

10 image.save(bio, format=_format) 

11 return bio.getvalue() 

12 

13 

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 ) 

19 

20 

21def image_to_base64_str(image: Image, _format: str = "PNG") -> str: 

22 return b64encode(image_to_bytes(image, _format)).decode() 

23 

24 

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

29 

30 return f"data:image/{_format.lower()};base64,{image_to_base64_str(image)}" 

31 

32 

33def base64_str_to_image(s: str) -> Image: 

34 return open_image(b64decode(s.encode()))