Spaces:
Sleeping
Sleeping
| import numpy as np | |
| from PIL import Image | |
| def resize_image(image_array, max_size=1048576): | |
| """ | |
| Resizes a NumPy image array to a maximum total size of 1048576 pixels while preserving the aspect ratio. | |
| Args: | |
| image_array (numpy.ndarray): The input image array. | |
| max_size (int): The maximum total size of the image in pixels (default is 1048576). | |
| Returns: | |
| numpy.ndarray: The resized image array. | |
| """ | |
| # Get the current size of the image | |
| height, width, _ = image_array.shape | |
| # Calculate the total size of the image | |
| total_size = height * width | |
| # If the image is already smaller than the max size, return the original image | |
| if total_size <= max_size: | |
| return image_array | |
| # Calculate the aspect ratio | |
| aspect_ratio = width / height | |
| # Calculate the new dimensions while preserving the aspect ratio | |
| if aspect_ratio > 1: | |
| new_width = int(np.sqrt(max_size * aspect_ratio)) | |
| new_height = int(new_width / aspect_ratio) | |
| else: | |
| new_height = int(np.sqrt(max_size / aspect_ratio)) | |
| new_width = int(new_height * aspect_ratio) | |
| # Resize the image using Pillow | |
| image = Image.fromarray(image_array) | |
| image = image.resize((new_width, new_height), resample=Image.BICUBIC) | |
| # Convert the resized image back to a NumPy array | |
| resized_image = np.array(image) | |
| return resized_image |