summaryrefslogtreecommitdiff
path: root/text_recognizer/util/image_utils.py
blob: fcb094cb60f64a02049b6a6435a06ed0ecf875b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"""Image util functions for loading and saving images."""
import base64
from io import BytesIO
from pathlib import Path
from typing import Any, Union

import smart_open
from PIL import Image


def read_image_pil(image_uri: Union[Path, str], grayscale: bool = False) -> Image:
    """Read image from uri."""
    with smart_open(image_uri, "rb") as image_file:
        return read_image_pil_file(image_file, grayscale)


def read_image_pil_file(image_file: str, grayscale: bool = False) -> Image:
    """Return PIL image."""
    with Image.open(image_file) as image:
        if grayscale:
            image = image.convert("L")
        else:
            image = image.convert(mode=image.mode)
    return image


def read_b64_image(b64_str: str, grayscale: bool = False) -> Image:
    """Load base64-encoded images."""
    try:
        _, b64_data = b64_str.split(",")
        image_file = BytesIO(base64.b64decode(b64_data))
        return read_image_pil_file(image_file, grayscale)
    except Exception as e:
        raise ValueError(f"Could not load image from b64 {b64_str}: {e}")