go
import os
from typing import Callable, Union
import PIL.Image
import PIL.ImageOps
import requests
def load_image(
image: Union[str, PIL.Image.Image], convert_method: Callable[[PIL.Image.Image], PIL.Image.Image] = None
) -> PIL.Image.Image:
"""
Loads `image` to a PIL Image.
Args:
image (`str` or `PIL.Image.Image`):
The image to convert to the PIL Image format.
convert_method (Callable[[PIL.Image.Image], PIL.Image.Image], optional):
A conversion method to apply to the image after loading it. When set to `None` the image will be converted
"RGB".
Returns:
`PIL.Image.Image`:
A PIL Image.
"""
if isinstance(image, str):
if image.startswith("http://") or image.startswith("https://"):
image = PIL.Image.open(requests.get(image, stream=True).raw)
elif os.path.isfile(image):
image = PIL.Image.open(image)
else:
raise ValueError(
f"Incorrect path or URL. URLs must start with `http://` or `https://`, and {image} is not a valid path."
)
elif isinstance(image, PIL.Image.Image):
image = image
else:
raise ValueError(
"Incorrect format used for the image. Should be a URL linking to an image, a local path, or a PIL image."
)
image = PIL.ImageOps.exif_transpose(image)
if convert_method is not None:
image = convert_method(image)
else:
image = image.convert("RGB")
return image
这个函数 load_image
允许以下几种类型的输入:
-
字符串类型 (
str
):- 代表图像的 URL (以
http://
或https://
开头)。 - 代表图像的 本地文件路径。
- 代表图像的 URL (以
-
PIL 图像对象 (
PIL.Image.Image
):- 直接传入已经加载的 PIL 图像对象。
详细解释
-
字符串类型 (
str
):-
URL :如果输入是一个 URL(以
http://
或https://
开头),函数会通过网络请求获取图像并加载为 PIL 图像对象。pythonif image.startswith("http://") or image.startswith("https://"): image = PIL.Image.open(requests.get(image, stream=True).raw)
-
本地文件路径 :如果输入是一个本地文件路径,函数会打开该文件并加载为 PIL 图像对象。
pythonelif os.path.isfile(image): image = PIL.Image.open(image)
-
-
PIL 图像对象 (
PIL.Image.Image
):-
如果输入已经是一个 PIL 图像对象,函数会直接使用该对象,无需再加载。
pythonelif isinstance(image, PIL.Image.Image): image = image
-