19 lines
466 B
Python
19 lines
466 B
Python
from __future__ import annotations
|
|
|
|
from io import BytesIO
|
|
|
|
from PIL import Image
|
|
|
|
|
|
def image_bytes_to_webp(raw: bytes, *, quality: int = 82) -> bytes:
|
|
im = Image.open(BytesIO(raw))
|
|
if im.mode == 'P':
|
|
im = im.convert('RGBA')
|
|
elif im.mode == 'LA':
|
|
im = im.convert('RGBA')
|
|
elif im.mode not in ('RGBA', 'RGB'):
|
|
im = im.convert('RGB')
|
|
out = BytesIO()
|
|
im.save(out, format='WEBP', quality=quality)
|
|
return out.getvalue()
|