1
0
Fork 0

Update tile.py

Accommodated no-source tiles better
This commit is contained in:
HoopyFreud 2023-07-08 21:27:28 -04:00 committed by GitHub
parent 757fb0d6a8
commit 80e124554d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 13 deletions

View File

@ -232,18 +232,18 @@ def process_tile_spiral(
**kwargs,
) -> Image.Image:
width, height = kwargs.get("size", source.size if source else None)
tiles: List[Tuple[int, int, Image.Image]] = []
# tile tuples is source, multiply by scale for dest
counter = 0
tile_coords = generate_tile_spiral(width, height, tile, overlap=overlap)
if len(tile_coords) == 1:
single_tile = True
else:
single_tile = False
for left, top in tile_coords:
counter += 1
logger.info(
@ -268,13 +268,16 @@ def process_tile_spiral(
if bottom > height:
needs_margin = True
bottom_margin = height - bottom
if needs_margin:
# in the special case where the image is smaller than the specified tile size, just use the image
#if no source given, we don't have a source image
if not source:
tile_image = None
elif needs_margin:
#in the special case where the image is smaller than the specified tile size, just use the image
if single_tile:
logger.debug("creating and processing single-tile subtile")
tile_image = source
# otherwise use add histogram noise outside of the image border
#otherwise use add histogram noise outside of the image border
else:
logger.debug("tiling and adding margin")
base_image = (
@ -286,20 +289,18 @@ def process_tile_spiral(
bottom - bottom_margin,
)
)
if source
else None
)
tile_image = noise_source_histogram(base_image, (tile, tile), (0, 0))
tile_image.paste(base_image, (left_margin, top_margin))
else:
logger.debug("tiling normally")
tile_image = source.crop((left, top, right, bottom)) if source else None
tile_image = source.crop((left, top, right, bottom))
for image_filter in filters:
tile_image = image_filter(tile_image, (left, top, tile))
tiles.append((left, top, tile_image))
if single_tile:
return tile_image
else:
@ -353,8 +354,11 @@ def generate_tile_spiral(
# calculate the start position of the tiling
span_x = tile + (width_tile_target - 1) * tile_increment
span_y = tile + (height_tile_target - 1) * tile_increment
logger.debug("tiled image overlap: %s. Span: %s x %s", overlap, span_x, span_y)
logger.debug(
"tiled image overlap: %s. Span: %s x %s",
overlap,span_x,span_y
)
tile_left = (
width - span_x