"Save Original" is available now (discussion #73) FIXES: - model path issue #78 - api model path string +VersionUP (beta3)
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
from collections import Counter
|
|
from PIL import Image
|
|
from math import isqrt, ceil
|
|
from typing import List
|
|
|
|
def make_grid(image_list: List):
|
|
"""
|
|
Creates a square image by combining multiple images in a grid pattern.
|
|
|
|
Args:
|
|
image_list (list): List of PIL Image objects to be combined.
|
|
|
|
Returns:
|
|
PIL Image object: The resulting square image.
|
|
None: If the image_list is empty or contains only one image.
|
|
"""
|
|
|
|
# Count the occurrences of each image size in the image_list
|
|
size_counter = Counter(image.size for image in image_list)
|
|
|
|
# Get the most common image size (size with the highest count)
|
|
common_size = size_counter.most_common(1)[0][0]
|
|
|
|
# Filter the image_list to include only images with the common size
|
|
image_list = [image for image in image_list if image.size == common_size]
|
|
|
|
# Get the dimensions (width and height) of the common size
|
|
size = common_size
|
|
|
|
# If there are more than one image in the image_list
|
|
if len(image_list) > 1:
|
|
num_images = len(image_list)
|
|
|
|
# Calculate the number of rows and columns for the grid
|
|
rows = isqrt(num_images)
|
|
cols = ceil(num_images / rows)
|
|
|
|
# Calculate the size of the square image
|
|
square_size = (cols * size[0], rows * size[1])
|
|
|
|
# Create a new RGB image with the square size
|
|
square_image = Image.new("RGB", square_size)
|
|
|
|
# Paste each image onto the square image at the appropriate position
|
|
for i, image in enumerate(image_list):
|
|
row = i // cols
|
|
col = i % cols
|
|
|
|
square_image.paste(image, (col * size[0], row * size[1]))
|
|
|
|
# Return the resulting square image
|
|
return square_image
|
|
|
|
# Return None if there are no images or only one image in the image_list
|
|
return None |