mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 13:52:43 +08:00
Co-authored-by: openhands <openhands@all-hands.dev> Co-authored-by: Graham Neubig <neubig@gmail.com>
32 lines
991 B
Python
32 lines
991 B
Python
import io
|
|
import base64
|
|
from PIL import Image
|
|
import numpy as np
|
|
|
|
def image_to_png_base64_url(
|
|
image: np.ndarray | Image.Image, add_data_prefix: bool = False
|
|
) -> str:
|
|
"""Convert a numpy array to a base64 encoded png image url."""
|
|
if isinstance(image, np.ndarray):
|
|
image = Image.fromarray(image)
|
|
if image.mode in ('RGBA', 'LA'):
|
|
image = image.convert('RGB')
|
|
buffered = io.BytesIO()
|
|
image.save(buffered, format='PNG')
|
|
|
|
image_base64 = base64.b64encode(buffered.getvalue()).decode()
|
|
return (
|
|
f'data:image/png;base64,{image_base64}'
|
|
if add_data_prefix
|
|
else f'{image_base64}'
|
|
)
|
|
|
|
def png_base64_url_to_image(png_base64_url: str) -> Image.Image:
|
|
"""Convert a base64 encoded png image url to a PIL Image."""
|
|
splited = png_base64_url.split(',')
|
|
if len(splited) == 2:
|
|
base64_data = splited[1]
|
|
else:
|
|
base64_data = png_base64_url
|
|
return Image.open(io.BytesIO(base64.b64decode(base64_data)))
|