File size: 1,049 Bytes
38a3c61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from PIL import Image
import numpy as np


def resize_and_pad(img, desired_size):
    """Resize an image and pad it to the desired size while maintaining the aspect ratio."""
    # Ensure image is in RGB
    if img.mode != "RGB":
        img = img.convert("RGB")

    # Compute the new size to maintain aspect ratio
    ratio = float(desired_size) / max(img.size)
    new_size = tuple([int(x * ratio) for x in img.size])
    img = img.resize(new_size, Image.Resampling.LANCZOS)

    # Create a new image with mean color padding
    new_im = Image.new("RGB", (desired_size, desired_size))
    pixel_values = np.array(img)
    mean_color = tuple(np.mean(np.mean(pixel_values, axis=0), axis=0).astype(int))
    new_im.paste(Image.new("RGB", new_im.size, mean_color), (0, 0))

    # Paste resized image onto the background
    new_im.paste(
        img, ((desired_size - new_size[0]) // 2, (desired_size - new_size[1]) // 2)
    )

    return new_im


def process_image(img, size):
    processed_img = resize_and_pad(img, size)
    return processed_img