fix(api): handle blending numpy arrays
This commit is contained in:
parent
1c3b2f8dfc
commit
83ebd77c3d
|
@ -2,7 +2,7 @@ import itertools
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from math import ceil
|
from math import ceil
|
||||||
from typing import Any, Callable, List, Optional, Protocol, Tuple
|
from typing import Any, Callable, List, Optional, Protocol, Tuple, Union
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
@ -138,6 +138,20 @@ def make_tile_mask(
|
||||||
return mask
|
return mask
|
||||||
|
|
||||||
|
|
||||||
|
def get_channels(image: Union[np.ndarray, Image.Image]) -> int:
|
||||||
|
if isinstance(image, np.ndarray):
|
||||||
|
return image.shape[-1]
|
||||||
|
|
||||||
|
if image.mode == "RGBA":
|
||||||
|
return 4
|
||||||
|
elif image.mode == "RGB":
|
||||||
|
return 3
|
||||||
|
elif image.mode == "L":
|
||||||
|
return 1
|
||||||
|
|
||||||
|
raise ValueError("unknown image format")
|
||||||
|
|
||||||
|
|
||||||
def blend_tiles(
|
def blend_tiles(
|
||||||
tiles: List[Tuple[int, int, Image.Image]],
|
tiles: List[Tuple[int, int, Image.Image]],
|
||||||
scale: int,
|
scale: int,
|
||||||
|
@ -151,7 +165,7 @@ def blend_tiles(
|
||||||
"adjusting tile size from %s to %s based on %s overlap", tile, adj_tile, overlap
|
"adjusting tile size from %s to %s based on %s overlap", tile, adj_tile, overlap
|
||||||
)
|
)
|
||||||
|
|
||||||
channels = max([4 if tile_image.mode == "RGBA" else 3 for _left, _top, tile_image in tiles])
|
channels = max([get_channels(tile_image) for _left, _top, tile_image in tiles])
|
||||||
scaled_size = (height * scale, width * scale, channels)
|
scaled_size = (height * scale, width * scale, channels)
|
||||||
|
|
||||||
count = np.zeros(scaled_size)
|
count = np.zeros(scaled_size)
|
||||||
|
|
Loading…
Reference in New Issue